Ir para conteúdo

POWERED BY:

Arquivado

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

cristiano_ferreira

Cadastra se não encontrar

Recommended Posts

Olá pessoa!

 

Estou com o seguinte problema:

 

Preciso gerar um número aleatório de 4 digitos e verificar se este número existe no banco de dados. Caso não exista ele grava o número. Caso exista ele tem que gerar outro e novamente verificar se existe no banco até achar um que não exista e gravar.

 

So sai do loop se ele gerar um número que não exista e gravar ele no banco.

 

Não estou conseguindo fazer. Será que alguem poderia me dar uma força?

 

O problema é so como fazer a verificação pois para gerar o numero sem problemas!

 

Valeu pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

um simples If para comparar, se = true então gera ele novamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi...

 

você tem:

 

'funçao que gera o numero

numero = gerar_nume(9, 4)

 

'recordset que verifica se numero existe no banco

rs_verifica_numero

 

'Se existe grava no banco

If rs_verifica_numero.EOF And rs_verifica_numero.BOF Then

INSERT NO BANCO

Else

AQUI É O PROBLEMA ... SE ELE ACHAR NO BANCO O ELE TEM QUE GERAR NUMEROS E VERIFICAR ATE NÃO ACHAR E GRAVAR

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma função para gravar os dados no banco

 

Exemplo

 

<%

numero = gerar_nume(9, 4)

 

Function insereBanco(numero)

 

SQL = "SELECT NUMERO FROM CADASTRO WHERE NUMERO = '"&numero&"'"

Set rs_verifica_numero = Con.Execute(SQL)

If Not rs_verifica_numero Then

 

retorno = "1"

 

Else

 

INSERE NO BANCO

retorno = "2"

 

End If

Set rs_verifica_numero = Nothing

 

Response.Write(retorno)

 

End Function

 

While insereBanco(numero) = 1

 

numero = gerar_nume(9, 4)

 

Wend

 

%>

 

Não tenho certeza se funciona, mas tenta aí.

 

 

Esqueci de colocar o .EOF

 

 

 

If Not rs_verifica_numero.EOF Then

Compartilhar este post


Link para o post
Compartilhar em outros sites

no else execute a função para gerar novamente, aconselho a usar assim:

 

RANDOM com registros de um banco de dados sem repetição.

<%
 
 
' Gravamos o Recordset em um Array Bidimensional
 
Set strRS = Server.CreateObject("ADODB.RecordSet") 
 
strRS.Open "SELECT * FROM membros ", strConexao, 3, 3
 
arySub = strRS.getRows()
 
 
 
' Fechamos a conexão pois não usaremos mais
 
strRS.Close
 
Set strRS = Nothing
 
strConexao.Close
 
Set strConexao = Nothing
 
 
 
Dim TotalReg, TotalNum, vran, x, encontrou, arrGerados(0)
 
Dim Numreg, verGerado, var_arrGerados, xLoop
 
 
 
Function GeraRegistros(TotalNum) 
 
TotalReg=Cint(uBound(arySub,2)) ' Encontramos o Maior Array Gerado
 
vran = 1
 
 
 
For x = 0 To TotalNum-1 ' LOOP de 1 p/ Total solicitado
 
encontrou = 1 
 
Randomize() ' Geramos o primeiro Random
 
NumReg = Cint((rnd*TotalReg))
 
verGerado = Split(var_arrGerados,",") ' Verifica se nº gerado
 
For xLoop = LBound(verGerado) To UBound(verGerado) 
 
IF Trim(verGerado(xLoop)) = Trim(NumReg) Then 
 
'Este "response" comentado abaixo, indica qual número se repetiram
 
'E não armazena no Array único, fazendo gerando um novo Random
 
'response.write "<b>[ "& verGerado(xLoop) &","& NumReg &" ]</b><br> "
 
x = x - 1 
 
encontrou = 2 
 
Exit For 
 
End IF 
 
Next
 
IF encontrou = 1 Then ' NÃO ENCONTROU, gera o próximo número
 
 
 
IF vran = 1 Then ' primeiro (Verificar este trecho)
 
arrGerados(0) = NumReg 
 
vran = 2
 
Else 
 
arrGerados(0) = arrGerados(0) &","& NumReg 
 
End IF
 
var_arrGerados = Join(arrGerados)
 
End IF
 
Next
 
GeraRegistros = var_arrGerados
 
End Function
 
' Array gerado, podemos iniciar a formatação de perguntas 
 
number = GeraRegistros(3)
 
 
 
verNum = Split(number, ",")
 
For x = LBound(verNum) to UBound(verNum)
 
response.write arySub(0,verNum(x)) &"."
 
response.write arySub(1,verNum(x)) &"<br>"
 
Next
 
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal vou colocar como montei o código. Acho que fica mais fácil!

 

<%
Function Sorteia(numTotal, numSort)
Dim numNumero, bolSorteado
ReDim vetSorteados(numSort - 1)

Randomize()

For x = 0 to numSort - 1
numNumero = CInt(Rnd() * numTotal)
bolSorteado = False

For y = 0 to x
If vetSorteados(y) = numNumero Then bolSorteado = True
Next

If bolSorteado = True Then
x = x - 1
Else
vetSorteados(x) = numNumero
End If
Next

Sorteia = Join(vetSorteados, "")
End Function

Function MM_IIf(condition, ifTrue, ifFalse)
If condition = "" Then
MM_IIf = ifFalse
Else
MM_IIf = ifTrue
End If
End Function

' STATUS
' 3 = DESLIGADO
' 2 = SE DESLIGANDO
' 1 = ATIVO

' PENALIDADE
' 5 = COM SUSPENSÃO
' 4 = COM ADVERTÊNCIA
' 3 = COM FALTA INJUSTIFICADA
' 2 = COM FALTA JUSTIFICADA
' 1 = COM FALTA ABONADA
' NULL = SEM FALTA, ADVERTÊNCIA OU SUSPENSÃO

Dim status_funcionario
status_funcionario = 1

Dim penalidade_limite
penalidade_limite = 2

Dim rs_penalidade__MMColParam
rs_penalidade__MMColParam = "1"
If (Request.QueryString("key") <> "") Then
rs_penalidade__MMColParam = Request.QueryString("key")
End If

Dim rs_campanha__MMColParam
rs_campanha__MMColParam = "1"
If (Request.QueryString("id_cp") <> "") Then
rs_campanha__MMColParam = Request.QueryString("id_cp")
End If
%>
<div style="margin-top: 20px; margin-left: 10px;">
<%

Dim rs_penalidade
Dim rs_penalidade_cmd
Dim rs_penalidade_numRows

Set rs_penalidade_cmd = Server.CreateObject ("ADODB.Command")
rs_penalidade_cmd.ActiveConnection = MM_conn_STRING
rs_penalidade_cmd.CommandText = "SELECT id_funcionario AS ID_FUNC, nivel_penalidade AS N_PEN, nome AS NOME FROM tb_funcionario WHERE (id_emp = ? AND status = ? AND nivel_penalidade <= ?)"
rs_penalidade_cmd.Prepared = true
rs_penalidade_cmd.Parameters.Append rs_penalidade_cmd.CreateParameter("param1", 5, 1, -1, rs_penalidade__MMColParam) ' adDouble
rs_penalidade_cmd.Parameters.Append rs_penalidade_cmd.CreateParameter("param2", 5, 1, -1, status_funcionario) ' adDouble
rs_penalidade_cmd.Parameters.Append rs_penalidade_cmd.CreateParameter("param3", 5, 1, -1, penalidade_limite) ' adDouble

Set rs_penalidade = rs_penalidade_cmd.Execute
rs_penalidade_numRows = 0

Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
rs_funcionarios_numRows = rs_funcionarios_numRows + Repeat1__numRows

Dim numero_sorte

Dim rs_numeros
Dim rs_numeros_cmd
Dim rs_numeros_numRows

Dim rs_numeros_cad
Dim rs_numeros_cad_cmd
Dim rs_numeros_cad_numRows

Dim MM_editCmd

Dim mensagem

If rs_penalidade.EOF = FALSE or rs_penalidade.BOF = FALSE Then

X = 0

While ((Repeat1__numRows <> 0) AND (NOT rs_penalidade.EOF))

X = X + 1

If rs_penalidade.Fields.Item("N_PEN").Value = 0 Then

Response.Write("<STRONG>FUNCIONÁRIO: </STRONG>" & rs_penalidade.Fields.Item("NOME").Value & " - 3 NÚMEROS DA SORTE<BR>")
Response.Write("<ul>")

For i = 1 to 3
Set rs_numeros_cad_cmd = Server.CreateObject ("ADODB.Command")
rs_numeros_cad_cmd.ActiveConnection = MM_conn_STRING
rs_numeros_cad_cmd.CommandText = "SELECT * FROM tb_numeros WHERE id_funcionario = ? AND status = ? AND id_campanha = ?"
rs_numeros_cad_cmd.Prepared = true
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd.CreateParameter("param1", 5, 1, -1, rs_penalidade.Fields.Item("ID_FUNC").Value) ' adDouble
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd.CreateParameter("param2", 5, 1, -1, 3) ' adDouble
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd. ("param3", 5, 1, -1, rs_campanha__MMColParam) ' adDouble


Set rs_numeros_cad = rs_numeros_cad_cmd.Execute
rs_numeros_cad_numRows = 0

If rs_numeros_cad.EOF = True AND rs_numeros_cad.BOF = True Then

numero_sorte = Sorteia(9, 4)

Set rs_numeros_cmd = Server.CreateObject ("ADODB.Command")
rs_numeros_cmd.ActiveConnection = MM_conn_STRING
rs_numeros_cmd.CommandText = "SELECT * FROM tb_numeros WHERE numero = ?"
rs_numeros_cmd.Prepared = true
rs_numeros_cmd.Parameters.Append rs_numeros_cmd.CreateParameter("param1", 5, 1, -1, numero_sorte) ' adDouble

Set rs_numeros = rs_numeros_cmd.Execute
rs_numeros_numRows = 0

If rs_numeros.EOF = True AND rs_numeros.BOF = True Then
Set MM_editCmd = Server.CreateObject ("ADODB.Command")
MM_editCmd.ActiveConnection = MM_conn_STRING
MM_editCmd.CommandText = "INSERT INTO tb_numeros (id_funcionario, numero, status, id_campanha) VALUES (?, ?, ?, ?)"
MM_editCmd.Prepared = true
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 5, 1, -1, MM_IIF(rs_penalidade.Fields.Item("ID_FUNC").Value, rs_penalidade.Fields.Item("ID_FUNC").Value, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 5, 1, -1, MM_IIF(numero_sorte, numero_sorte, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param3", 5, 1, -1, MM_IIF(i, i, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param4", 5, 1, -1, MM_IIF(rs_campanha__MMColParam, rs_campanha__MMColParam, null)) ' adDouble
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close

mensagem = "OS NÚMEROS DA SORTE FORAM GERADOS COM SUCESSO. "

Response.Write("<li>Numero da Sorte " & i & ": " & numero_sorte & "</li>")
Else
' AQUI É O PROBLEMA
End If

rs_numeros.Close()
Set rs_numeros = Nothing
Else
mensagem = "PROCESSO FINALIZADO!"

Response.Write("<li>ESTE FUNCIONÁRIO JÁ RECEBEU SEU " & i & "º NÚMERO DA SORTE!</li>")
End If
'
rs_numeros_cad.Close()
Set rs_numeros_cad = Nothing
Next
Response.Write("</ul>")
Else
Response.Write("<STRONG>FUNCIONÁRIO: </STRONG>" & rs_penalidade.Fields.Item("NOME").Value & " - 1 NÚMEROS DA SORTE<BR>")

Response.Write("<ul>")

Set rs_numeros_cad_cmd = Server.CreateObject ("ADODB.Command")
rs_numeros_cad_cmd.ActiveConnection = MM_conn_STRING
rs_numeros_cad_cmd.CommandText = "SELECT * FROM tb_numeros WHERE id_funcionario = ? AND status = ? AND id_campanha = ?"
rs_numeros_cad_cmd.Prepared = true
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd.CreateParameter("param1", 5, 1, -1, rs_penalidade.Fields.Item("ID_FUNC").Value) ' adDouble
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd.CreateParameter("param2", 5, 1, -1, 1) ' adDouble
rs_numeros_cad_cmd.Parameters.Append rs_numeros_cad_cmd.CreateParameter("param3", 5, 1, -1, rs_campanha__MMColParam) ' adDouble

Set rs_numeros_cad = rs_numeros_cad_cmd.Execute
rs_numeros_cad_numRows = 0

If rs_numeros_cad.EOF = True AND rs_numeros_cad.BOF = True Then

numero_sorte = Sorteia(9, 4)

Set rs_numeros_cmd = Server.CreateObject ("ADODB.Command")
rs_numeros_cmd.ActiveConnection = MM_conn_STRING
rs_numeros_cmd.CommandText = "SELECT * FROM tb_numeros WHERE numero = ?"
rs_numeros_cmd.Prepared = true
rs_numeros_cmd.Parameters.Append rs_numeros_cmd.CreateParameter("param1", 5, 1, -1, numero_sorte) ' adDouble

Set rs_numeros = rs_numeros_cmd.Execute
rs_numeros_numRows = 0

If rs_numeros.EOF = True AND rs_numeros.BOF = True Then
Set MM_editCmd = Server.CreateObject ("ADODB.Command")
MM_editCmd.ActiveConnection = MM_conn_STRING
MM_editCmd.CommandText = "INSERT INTO tb_numeros (id_funcionario, numero, status, id_campanha) VALUES (?, ?, ?, ?)"
MM_editCmd.Prepared = true
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 5, 1, -1, MM_IIF(rs_penalidade.Fields.Item("ID_FUNC").Value, rs_penalidade.Fields.Item("ID_FUNC").Value, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 5, 1, -1, MM_IIF(numero_sorte, numero_sorte, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param3", 5, 1, -1, MM_IIF(1, 1, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param4", 5, 1, -1, MM_IIF(rs_campanha__MMColParam, rs_campanha__MMColParam, null)) ' adDouble
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close

mensagem = "OS NÚMEROS DA SORTE FORAM GERADOS COM SUCESSO"

Response.Write("<li>Numero da Sorte: " & numero_sorte & "</li>")
Else
numero_sorte = Sorteia(9, 4)

Set MM_editCmd = Server.CreateObject ("ADODB.Command")
MM_editCmd.ActiveConnection = MM_conn_STRING
MM_editCmd.CommandText = "INSERT INTO tb_numeros (id_funcionario, numero, status, id_campanha) VALUES (?, ?, ?, ?)"
MM_editCmd.Prepared = true
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 5, 1, -1, MM_IIF(rs_penalidade.Fields.Item("ID_FUNC").Value, rs_penalidade.Fields.Item("ID_FUNC").Value, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 5, 1, -1, MM_IIF(numero_sorte, numero_sorte, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param3", 5, 1, -1, MM_IIF(1, 1, null)) ' adDouble
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param4", 5, 1, -1, MM_IIF(rs_campanha__MMColParam, rs_campanha__MMColParam, null)) ' adDouble
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close

mensagem = "OS NÚMEROS DA SORTE FORAM GERADOS COM SUCESSO. "

Response.Write("<li>Numero da Sorte " & i & ": " & numero_sorte & " DUPLICADO </li>")
End If

rs_numeros.Close()
Set rs_numeros = Nothing
Else
mensagem = "PROCESSO FINALIZADO!"

Response.Write("<li>ESTE FUNCIONÁRIO JÁ RECEBEU SEU NÚMERO DA SORTE!</li>")
End If

rs_numeros_cad.Close()
Set rs_numeros_cad = Nothing

Response.Write("</ul>")
End If
Response.Write("<BR>")

Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
rs_penalidade.MoveNext()
Wend
Else
mensagem = "NENHUM REGISTRO ENCONTRADO PARA ESTA CAMPANHA!"
End If

Response.Write("<div style='width: 100%; height: 30px; border: solid 1px #000; text-align: center; padding-top: 13px; font-weight: bolder; background-color: #F90;'>" & mensagem & "</div>")

rs_penalidade.Close()
Set rs_penalidade = Nothing
%>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa aquela função que postei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

adapte apenas a

Function GeraRegistros(TotalNum) 

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.