Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Loop para testar se há algo no banco


marvi

Pergunta

Olá pessoal, vamos lá...

Como resolver essa lógica:

Tem um formulário que pode gerar vários campos e se a pessoa resolver gerar dois campos ocorre isso:

Nome:

Nome:

Aí a pessoa digita, por exemplo:

Nome: Ok

Nome: Ok1

E envia para o banco de vez.

Código:

<% for i=1 to session("qtfabri") 
%>

<tr>
<td width="24%" height="23">

Nome do fabricante:</td>
<td width="76%" height="23">
<input type="text" name="nome<%=i%>" size="72" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE" value="<%=request.form("nome"&i)%>"></td>
</tr>

<td width="24%" height="1" bgcolor="#BAC8DC">
<img border="0" src="imagens/linhatransparente1.gif" width="62" height="1"></td>
<td width="76%" height="1" bgcolor="#BAC8DC">
<img border="0" src="imagens/linhatransparente1.gif" width="62" height="1"></td>
</tr>
<%next%>
Até aí tudo bem, ele roda normal e insere normal no banco. Mas aí a pessoa resolve gerar dois campos ou mais campos de novo do formulário e digita: Nome: Ok (veja que esse nome já foi digitado antes e estar no banco) Nome: ok 2 Nome: ok 3 Aí na hora de inserir criei esse teste antes para ver se já existe o nome no banco, se existe ele não insere. Ele manda uma session com a quantidade de campos criados no formulário que é preenchido para inserir no banco e faz o teste:
for i=1 to session("novo") 

teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"
Set rsfabricantesteste=Conexao.Execute(teste)

next

Só que aí é que está o problema... Se o nome Ok, que já foi digitado e inserido no campo, for o primeiro dos campos do formulário, como no exemplo acima, ele não reconhece neste teste que fiz.

Isso ocorre por esse motivo lógico: porque ele dará o loop... quando passa o nome Ok (que já foi digitado) ele ver que está no banco, mas terá que dar outro loop de novo para ver os nomes Ok 2 e Ok 3 que não foi digitado antes e assim ao acabar os loops ele irá considerar o último loop que foi com o nome Ok 3 e assim "esquece" que logo no inicio o nome Ok já está no banco e acaba cadastrando tudo: Ok (de novo), Ok 2, Ok 3.

Ele só funciona se o nome Ok foi digitado no último campo gerado no formulário, pois terá o loop testando Ok 2, Ok3 e o último será o Ok e assim ele irá considerar o ultimo loop que foi com o nome Ok (que já foi cadastrado antes) e verá que não pode cadastrá-lo e acusa que não pode cadastrar.

Então como resolver isso? Como fazer com que o teste reconheça o que já foi cadastrado, como esse nome Ok por exemplo, em qualquer posição do loop?

Tipo se ele foi cadastrado no primeiro campo, segundo ou terceiro campo do formulário, não importa, o importante é que ele reconheça que uma vez já foi cadastro esse nome Ok e em um determinado momento do Loop acusou isso (não importa se foi no ultimo loop ou o primeiro loop do teste).

Pois assim não deixo que a pessoa insira o mesmo nome já cadastrado juntos com outros nomes novos. Como resolver isso, alguém pode ver isso?

Já tentei aqui e nada...

Obrigado!!

Marcelo

Editado por marvi
Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

Olá Rafale, elimina uns dos tópicos meu que está repetido, por favor :)

Funciona o session sim, mas a questão é:

Porque ele dará o loop... quando passa o nome Ok (que já foi digitado) ele ver que está no banco, mas terá que dar outro loop de novo para ver os nomes Ok 2 e Ok 3 que não foi digitado antes e assim ao acabar os loops ele irá considerar o último loop que foi com o nome Ok 3 e assim "esquece" que logo no inicio o nome Ok já está no banco e acaba cadastrando tudo: Ok (de novo), Ok 2, Ok 3.

Entendeu? Veja o tópico...

Abraço!

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Mas no seu caso tanto a verificação como o insert terão que estar dentro do mesmo loop... com condicionais do tipo...

Se estiver na consulta não insere no bd... se não estiver na consulta insere no bd...

No caso o que está faltando pra você é isso... não sei se consegui me fazer entender?

Link para o comentário
Compartilhar em outros sites

  • 0

Certo!

Acho que entendi sim, mas como fazer isso? Veja meu código como estar:

for i=1 to session("novo")

teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

Set rsfabricantesteste=Conexao.Execute(teste)

next

IF not rsfabricantesteste.EOF Then

já tem algo

else

INSERT

É isso que fala? Pois está assim... só que esse rsfabricantesteste.EOF só dar a informação depois de todos os loops feitos. Como segurar só um loop e testar, segurar outro loop e testar...?

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Boa... eu acho que deveria ter um while ali... tipo... a consulta vir antes... sacou?

Tipo assim (não me preocupei com a sintaxe porque ta correria... se você não entender posta ai que quando der um tempinho eu arrumo... mas acho q você me entendera!):

teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"
Set rsfabricantesteste=Conexao.Execute(teste)

while rsfabricante...

for i=1 to session("novo")


next

IF not rsfabricantesteste.EOF Then

já tem algo

else

rsfabricante.movenext...

Link para o comentário
Compartilhar em outros sites

  • 0

O seu abre varias vezes o mesmo select... não percorre os dados criando um recordset sacou?

Olha só... realmente foi muito corrido hoje... e to saindo agora... só passei pra dar uma olhadinha e ver se tinha conseguido... faz assim... se você não conseguir amanhã posto mais detalhado e com a sintaxe certa, ok?

Abração...

Link para o comentário
Compartilhar em outros sites

  • 0

Tava tentando fazer algo do tipo:

teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

Set rsfabricantesteste=Conexao.Execute(teste)

IF rsfabricantesteste.EOF then

conta = 0

While Not rsfabricantesteste.EOF

nome = rsfabricantesteste("nome")

conta = conta +1

rsfabricantesteste.MoveNext

If Not rsfabricantesteste.EOF Then

If rsfabricantesteste("nome") <> nome Then

response.write("nome")

conta = 0

End If

End If

Wend

Mas não deu ainda... Alguém tem uma dica?

Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo, eu acredito que isso seja assim:

'aqui começa o loop para percorrer a consulta atras de registros repetidos
for i=1 to session("novo")

'aqui faz a consulta dentro do primeiro loop
teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

'setando o recordset
Set rsfabricantesteste=Conexao.Execute(teste)

'aqui você começa a percorrer os registros comparando o recordset com a variavel vinda do form
While Not rsfabricantesteste.EOF

'condicional comparativa
if campo_do_form <> rsfabricantesteste("campodobd") then

'faça a instrução instrução de insert, update ou delete
'insert into...

'se for igual não faz nada, indo para o próximo registro!
else
rsfabricantesteste.MoveNext
wend

'fim das condicionais
end if

'termino do primeiro loop
next

testa aí e depois posta aqui os resultados!

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Rafale,

Fiz, mas deu:

Erro de compilação do Microsoft VBScript (0x800A0400)

Instrução esperada

/vivo/inserirfabricantessql.asp, line 92

wend

Codigo:

'aqui começa o loop para percorrer a consulta atras de registros repetidos
for i=1 to session("novo")

'aqui faz a consulta dentro do primeiro loop
teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

'setando o recordset
Set rsfabricantesteste=Conexao.Execute(teste)

'aqui você começa a percorrer os registros comparando o recordset com a variavel vinda do form
While Not rsfabricantesteste.EOF

'condicional comparativa
if request.form("nome"&i) <> rsfabricantesteste("campodobd") then

'faça a instrução instrução de insert, update ou delete
'insert into...
response.write("teste")
'se for igual não faz nada, indo para o próximo registro!
else
rsfabricantesteste.MoveNext
LINHA 92: wend

'fim das condicionais
end if

'termino do primeiro loop
next

Acho que esse wend, onde é o erro, não é reconhecido como parte do While, coloquei Do While Not rsfabricantesteste.EOF com loop e dar a mesma coisa...

Acho que não reconhece por causa do else que diz se vai ou não para o resto da linha que tem o wend...

Tirei esse web daí e coloquei la no fim da página

loop

next

Onde passa pela mensagem que criei de erro... Mas, parece que ele funciona se caso tenha algo no banco... mas caso não tenha ele não insere... isso é o problema...

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Ms aí ele acusa:

Objeto Response, ASP 0104 (0x80070057)

Operação não permitida

/vivo/inserirfabricantessql.asp

'aqui começa o loop para percorrer a consulta atras de registros repetidos
for i=1 to session("novo")

'aqui faz a consulta dentro do primeiro loop
teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

'setando o recordset
Set rsfabricantesteste=Conexao.Execute(teste)

'aqui você começa a percorrer os registros comparando o recordset com a variavel vinda do form
While Not rsfabricantesteste.EOF

'condicional comparativa
if request.form("nome"&i) <> rsfabricantesteste("nome") then


'se for igual não faz nada, indo para o próximo registro!
else
rsfabricantesteste.MoveNext


'fim das condicionais
end if

wend

'termino do primeiro loop
next

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Mas assim... o que eu quis dizer com o wend abaixo do end if era referente a toda clausula que o compunha, assim:

'aqui começa o loop para percorrer a consulta atras de registros repetidos
for i=1 to session("novo")

'aqui faz a consulta dentro do primeiro loop
teste= "Select * from fabricantes where nome = '" & request.form("nome"&i)& "'"

'setando o recordset
Set rsfabricantesteste=Conexao.Execute(teste)

'aqui você começa a percorrer os registros comparando o recordset com a variavel vinda do form
While Not rsfabricantesteste.EOF

'condicional comparativa
if request.form("nome"&i) <> rsfabricantesteste("nome") then


'se for igual não faz nada, indo para o próximo registro!
else

end if

rsfabricantesteste.MoveNext
wend

'termino do primeiro loop
next

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...