Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Moreira

Chave Aleatória, esta correto este código

Recommended Posts

Ola pessoal eu to usando o codigo abaixo para cadastrar materias com chaves aleatorias

Ele funciona certinho, porem quando coloquei este codigo aqui falaram que ele faz um LOOP se o resultado ja existir

 

MAS houve um registro repitido em meu banco, por isso estou postando esta certo o código ele realmente esta fazendo um LOOP até que realmente nao encontre uma chave ja existente.

 

???

 

Function chave(nQuant,ref)
	For Cont = 1 to nQuant
		Randomize
		If (Int(rnd*10) Mod 2 = 0) Then
			sRand = sRand + Chr(rnd * 25 + 97)
		Else
			sRand = sRand + Cstr(Int(rnd * 10))
		End If
	Next

	chave = sRand & ref	
	
	sql = "SELECT * FROM materia where MatChave='"&chave&"'"
	Set RS = Conn.Execute(sql)
	
	If Not RS.eof then
		Call chave(nQuant,ref)
	End If
	Set RS = Nothing
	
End Function

sql = "Insert Into materia (MatChave) VALUES ('" & chave(20,login) & "')"
Conn.Execute(sql)
Call fecha_conexao1()

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma dica, coloque acoplado ao randomize uma função para adicionar as horas, minutos, segundos e milésimos de segundo no final assim não vai ter como aparecer iguais e não vai precisar dessa validação:

 

veja ai se roda:

<%

Function chave(nQuant,ref)
	For Cont = 1 to nQuant
		Randomize
		If (Int(rnd*10) Mod 2 = 0) Then
			chave = sRand + Chr(rnd * 25 + 97)
		Else
			chave = sRand + Cstr(Int(rnd * 10))
		End If
	Next	
End Function


	chave = chave(20,login)
	
	sql = "SELECT * FROM materia where MatChave='"&chave&"'"
	Set RS = Conn.Execute(sql)
	
	If RS.eof then
		response.Write("já existe")
	else
		sql = "Insert Into materia (MatChave) VALUES ('" & chave(20,login) & "')"
		Conn.Execute(sql)
		response.Write("adicionado")	
	End If
	Set RS = Nothing

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma dica, coloque acoplado ao randomize uma função para adicionar as horas, minutos, segundos e milésimos de segundo no final assim não vai ter como aparecer iguais e não vai precisar dessa validação:

isso eu ja disse quando coloquei essa funcao

Function chave(nQuant,ref)

ref é uma referencia para a chave, nao precisa incluir dentro da funcao pois pode mesclar hora com nome; jora com login...

 

Function chave(10,hora) = aldks4a5dtHORA

 

hora_nome = hora&login

Function chave(10,hora_nome) = aldks4a5dtHORALOGIN

 

acho que dessa forma fica mais livre, mas vai de gosto pra gosto

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim galera eu ja entendi, mas nao gostaria de cadastrar com as horas mintos segundos etc.

 

Quero valores como o do YOUTUBE mesmo. Como esta o código hoje com 20 caracteres ele esta certinho.

 

Não tem problema de fazer a validação desde que ela funcione, porque segundo o que me passaram o codigo faria o LOOP.

 

o TEDK postou ai, mas seguinte TEDK até aqui eu sei fazer o problema é se cair aqui response.Write("já existe")

que função? Seria esta que postei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria isso?

x = 0
While x = 0
	chave = chave(20,login)
	
	sql = "SELECT * FROM materia where MatChave='"&chave&"'"
	Set RS = Conn.Execute(sql)
	
	If RS.eof then
		response.Write("já existe")
	else
		sql = "Insert Into materia (MatChave) VALUES ('" & chave(20,login) & "')"
		Conn.Execute(sql)
		response.Write("adicionado")	
		x = 1
	End If
	Set RS = Nothing
Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

A duvida é a seguinte.

 

Realmente HOUVE uma CHAVE repetida no meu banco, e gostaria de saber se esta correta a rotina usada no código abaixo para NUNCA repetir a CHAVE.

 

Porem percebo que nao tem um LOOP aqui mas segundo outros programadores neste código abaixo esta com rotina LOOP se houver o registro.

 

Function chave(nQuant,ref)
	For Cont = 1 to nQuant
		Randomize
		If (Int(rnd*10) Mod 2 = 0) Then
			sRand = sRand + Chr(rnd * 25 + 97)
		Else
			sRand = sRand + Cstr(Int(rnd * 10))
		End If
	Next

	chave = sRand & ref	
	
	sql = "SELECT * FROM materia where MatChave='"&chave&"'"
	Set RS = Conn.Execute(sql)
	
	If Not RS.eof then
		Call chave(nQuant,ref)
	End If
	Set RS = Nothing
	
End Function

sql = "Insert Into materia (MatChave) VALUES ('" & chave(20,login) & "')"
Conn.Execute(sql)
Call fecha_conexao1()

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.