Ir para conteúdo

POWERED BY:

Arquivado

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

manga

Problema com "For Each"

Recommended Posts

Tenho um ASP que exclui registros de uma tabela e os transfere para outra. Os registros a serem excluídos são determinados através de um form com a seguinte estrutura:

 

<input type="checkbox" name="s1" value="on" >

<input type="hidden" name="h1" value="10116">

 

<input type="checkbox" name="s2" value="on" >

<input type="hidden" name="h2" value="10117">

 

Os checkbox s(x) marcados determinam quais registros excluir através do campo h(x) que é o ID do registro. O ASP é assim:

 

(Dados para abrir a conexão, etc)

 

Dim FormField, s, id1, id, tabela1, tabela2, sql, sql1, sql2, sql3

 

Verifica que tabelas usar (são 2 forms na html)

If Request.Form("tipo") = "p" Then

tabela1 = "prospect"

tabela2 = "prospect_off"

Else

tabela1 = "clientes"

tabela2 = "clientes_off"

End If

 

RS.Open tabela1, connect, , , 2

 

For Each FormField in Request.Form

 

Seleciona os campos s(x) marcados

 

If Instr(FormField,"s") = 1 AND Request.Form(FormField)="on" Then

s = s + 1

id1 = "h"&s

id = Request.Form(id1)

 

sql = "SELECT * FROM "&tabela1&" WHERE id='"&id&"'"

set RS = connect.execute(sql)

 

Aqui vem uma função para capturar os nomes dos campos (TheFields) e valores(TheValues) e continua:

 

sql1 = "INSERT INTO "&tabela2&" (" & TheFields & ") VALUES (" & TheValues & ")"

sql2 = "UPDATE "&tabela2&" SET data_off = #"&Date&"# WHERE id = '" & id & "'"

sql3 = "DELETE from "&tabela1&" WHERE id='"&id&"'"

connect.execute sql1

connect.execute sql2

connect.execute(sql3)

 

Response.Write tabela1&" "&RS("login")&" - ID: "&id&" excluído"

 

End If

Next

 

O erro é

 

error '80020009'

Ocorreu uma exceção.

 

O estranho é que ele executa a operação para o primeiro registro selecionando, ou seja, realmente transfere 1 registro e depois dá erro.

 

Por Favor me Ajudem!

Manga

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar o mesmo nome para esses checkboxes e fazer um for Lboud(request()) to Ubound(request())

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você der o mesmo nome para o Checkbox os selecionados virão como um array, seria algo assim: request("nome")(0) teria o primeiro Check selecionado e por ai vai.

O LBound() pega o menor indice do array (o padrão é 0)

o UBpund() pega o maior indice do array.

 

Então seria usado +/- assim:

For x = LBound(Request("nome")) To UBound(Request("nome"))
'Aqui vai o que você quer fazer
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado,Achei uma maneira mais simples de achar o valor do checkbox:s = replace(FormField,"s","")Testei as variáveis e o ASP está capturando tudo corretamente, porém o erro continua. O erro indica que o recordset está vazio, será que isso tem haver com o comando DELETE ???Manga

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que era o DELETE mesmo. Coloquei o Response.Write antes e o erro desapareceu. Mas, apareceu um novo!!!Microsoft JET Database Engine error '80040e14' Destino 'login' de saída duplicado. Só que o campo login não está indexado e nem bloqueado para duplicações!!! :D Help!!!

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.