none
For Each - ASP RRS feed

  • Pergunta

  • Olá pessoal!!! Sou novato  e estou precisando de ajuda!!!

    Tenho um form que contem dois campos um input text , um select e submit. (quantidade, tipo de acabamento e enviar)

    Consegui realizar um for each que atualiza (insere) dados em um banco de dados quando clicado no enviar, mas no local do acabamento esta salvando o valor da quantidade, ja tentei alterar mas não conheço muito sobre for each.

    Abaixo seque o codigo apenas do form e da instrução Insert:

    Form:
    <form method="post" action="atualiza.asp">
    <input type="text" name="<% = rsItensPedido("itens.idproduto")%>" value="<% =rsItensPedido("qtdeProduto") %>">
    <select size="1">
            <option value="<% = rsItensPedido("itens.acabamento")%>"><% = rsItensPedido("itens.acabamento")%></option>
            <option value="Bicromatizado">Bicromatizado</option>
            <option value="Zincado">Zincado</option>

    Insert:

    For Each field_Name in Request.Form
       
        strInsItem = "INSERT into Itens (CodPedido, idProduto, acabamento, qtdeProduto) VALUES (" & Session("codPed") & ", " &  field_Name & ", " & Request.Form(field_Name) & ", " & Request.Form(field_Name) & ")"


    Muito obrigado pela atenção.
    domingo, 21 de junho de 2009 15:10

Todas as Respostas

  • Olá.

    Acho q vc nao precisa de for each.  Tenta fazer assim:

    De nomes fixo para o input e o select:
    <input type="text" name="txtQtd">
    <select size="1" name="selTpAcab">

    E depois monte o insert sem usar o for each, passando os valores do Form desta forma:
    Request.Form("txtQtd")
    Request.Form("selTpAcab")

    terça-feira, 23 de junho de 2009 12:24
  • F1rm10,

    Cara valeu pela resposta!!!

    Já tentei isso, mas o que ocorre é que os campos txtQtd e txtAcab pega dados de uma tabela e por sua vez essa tabela tem varios itens, quando faço dessa forma da erro, diz que a quantidade de campos não coincidem.

    Consegui fazer de outra forma, só naum sei se é a melhor!

    '***** Pega os valores do formulario ****************************************************************************************************************
    x1 = split(request.Form("txtPed"),",")
    x2 = split(request.Form("txtIdProd"),",")
    x3 = split(request.Form("txtqtde"),",")
    x4 = split(request.Form("txtAcab"),",")
    '***** Se o valor enviado pelo form for diferente de vazio deleta todos os item do pedido X *****************************************************
    	IF Request.Form <> "" THEN
    	conexaodb.Execute "DELETE FROM Itens WHERE codPedido = " & session("codPed")
    '***** realiza um for na quantidade de itens no array x1 ********************************************************************************************	
    	for x=0 to Ubound(x1)
    '***** Se X3 for diferente de zero realiza o insert no banco de dados *******************************************************************************
    	IF x3(x) <> 0	 THEN
    '***** Insere dos dados na tabela itens *************************************************************************************************************		
    	strInsItem = "INSERT into Itens (CodPedido, idProduto, acabamento, qtdeProduto) VALUES ( '"&x1(x)&"', '"&x2(x)&"', '"&x4(x)&"', '"&x3(x)&"' )"
    	Set rsIInstem = conexaodb.Execute(strInsItem)
    	Set rsIInstem = Nothing
    End if
    Next
    End if
    Call fechaconexao
    response.redirect ("cesta.asp")
    
       Muito obrigado!

    Abraços!
    terça-feira, 23 de junho de 2009 13:19
  • Reynaldo, neste seu caso, acho que o melhor a fazer é criar nomes dos campos com o ID junto, exemplo. (dinamicamente)

    <input type="text" name="produto_<%=codigo%>" />

    Assim no for each com um split ou com função de busca de string você consegue ir buscar de qual ID pertence cada campo, creio que fique bem parecido com seu ultimo código.

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 24 de junho de 2009 04:22
  • Luiz Estevan,

    Obrigado!

    Vou dar uma olhada pra ver como fica!


    Abraço!
    quarta-feira, 24 de junho de 2009 11:39
  • Olá.
    Entendi, são vários items. O q foi proposto pelo Luiz é uma boa solução tb. Só algumas dicas:
    -Se estiver usando SQL Server, crie Stored Procedure(Tem melhor desempenho e é mais seguro).
    -Vc nao precisa criar um RecordSet no comando de insert:
    Set rsIInstem = conexaodb.Execute(strInsItem)

    vc pode pegar o retorno numa variavel assim:

    intTotalInserido =  conexaodb.Execute(strInsItem)

    Boa sorte.

     

    quarta-feira, 24 de junho de 2009 13:23