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

Como Fazer Um Update Quando O Mesmo Tem Vários Campos ?


fabio_br

Pergunta

Bom dia

Estou tendo problemas para fazer um update quando o mesmo tem vários campos gerados por um repeat region. Quando tenho só um resultado consigo fazer o update, mas quando tenho vários dá erro.

Veja o código:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/catvi.asp" -->
<%
Dim MM_editAction
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
Dim MM_abortEdit
MM_abortEdit = false
%>
<%
' IIf implementation
Function MM_IIf(condition, ifTrue, ifFalse)
  If condition = "" Then
    MM_IIf = ifFalse
  Else
    MM_IIf = ifTrue
  End If
End Function
%>
<%
If (CStr(Request("MM_update")) = "form1") Then
  If (Not MM_abortEdit) Then
    ' execute the update
    Dim MM_editCmd

    Set MM_editCmd = Server.CreateObject ("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_catvi_STRING
    MM_editCmd.CommandText = "UPDATE Estoque SET Estoque = ? WHERE ProductDetailID = ?" 
    MM_editCmd.Prepared = true
    MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 5, 1, -1, MM_IIF(Request.Form("qtidade"), Request.Form("qtidade"), null)) ' adDouble
    MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 5, 1, -1, MM_IIF(Request.Form("MM_recordId"), Request.Form("MM_recordId"), null)) ' adDouble
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close

    ' append the query string to the redirect URL
    Dim MM_editRedirectUrl
    MM_editRedirectUrl = "stockcontrol.asp"
    If (Request.QueryString <> "") Then
      If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0) Then
        MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
      Else
        MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
      End If
    End If
    Response.Redirect(MM_editRedirectUrl)
  End If
End If
%>
<%
Dim rsOrder__MMColParam
rsOrder__MMColParam = "1"
If (Request.Form("numpedido") <> "") Then 
  rsOrder__MMColParam = Request.Form("numpedido")
End If
%>
<%
Dim rsOrder
Dim rsOrder_cmd
Dim rsOrder_numRows

Set rsOrder_cmd = Server.CreateObject ("ADODB.Command")
rsOrder_cmd.ActiveConnection = MM_catvi_STRING
rsOrder_cmd.CommandText = "SELECT OrderDetailsID, OrderID, estoque_final, ProductDetailID  FROM orderDetails  WHERE OrderID = ?" 
rsOrder_cmd.Prepared = true
rsOrder_cmd.Parameters.Append rsOrder_cmd.CreateParameter("param1", 5, 1, -1, rsOrder__MMColParam) ' adDouble

Set rsOrder = rsOrder_cmd.Execute
rsOrder_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
rsOrder_numRows = rsOrder_numRows + Repeat1__numRows
%>
<%
Dim estoque__numRows
Dim estoque__index

estoque__numRows = -1
estoque__index = 0
rsOrder_numRows = rsOrder_numRows + estoque__numRows
%>
<%
Dim MM_paramName 
%>
<%
' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters

Dim MM_keepNone
Dim MM_keepURL
Dim MM_keepForm
Dim MM_keepBoth

Dim MM_removeList
Dim MM_item
Dim MM_nextItem

' create the list of parameters which should not be maintained
MM_removeList = "&index="
If (MM_paramName <> "") Then
  MM_removeList = MM_removeList & "&" & MM_paramName & "="
End If

MM_keepURL=""
MM_keepForm=""
MM_keepBoth=""
MM_keepNone=""

' add the URL parameters to the MM_keepURL string
For Each MM_item In Request.QueryString
  MM_nextItem = "&" & MM_item & "="
  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
    MM_keepURL = MM_keepURL & MM_nextItem & Server.URLencode(Request.QueryString(MM_item))
  End If
Next

' add the Form variables to the MM_keepForm string
For Each MM_item In Request.Form
  MM_nextItem = "&" & MM_item & "="
  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
    MM_keepForm = MM_keepForm & MM_nextItem & Server.URLencode(Request.Form(MM_item))
  End If
Next

' create the Form + URL string and remove the intial '&' from each of the strings
MM_keepBoth = MM_keepURL & MM_keepForm
If (MM_keepBoth <> "") Then 
  MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
End If
If (MM_keepURL <> "")  Then
  MM_keepURL  = Right(MM_keepURL, Len(MM_keepURL) - 1)
End If
If (MM_keepForm <> "") Then
  MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)
End If

' a utility function used for adding additional parameters to these strings
Function MM_joinChar(firstItem)
  If (firstItem <> "") Then
    MM_joinChar = "&"
  Else
    MM_joinChar = ""
  End If
End Function
%>

<%
Dim numprodid
numprodid = (rsOrder.Fields.Item("ProductDetailID").Value)
%>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.style54 {font-family: Tahoma;
    font-weight: bold;
    font-size: 10px;
}
.style3 {    font-size: 10px;
    font-family: Tahoma;
    width: 250px;
}
-->
</style>

</head>

<body>
<p>&nbsp;&nbsp;
<p><strong>N&uacute;mero do pedido:</strong><%=Request.Form("numpedido")%> </p>
<p>Detalhe do pedido: </p>
<p>&nbsp;</p>
<form ACTION="<%=MM_editAction%>" METHOD="POST" id="form1" name="form1">
  <p>&nbsp;</p>
  
  
  
  <% 
While ((Repeat1__numRows <> 0) AND (NOT rsOrder.EOF)) 
%>
    <table width="705" border="0">
      <tr>
        <td width="49">&nbsp;</td>
        <td width="278">Produto:
          <input name="produtoid" type="text" id="produtoid" value="<%=(rsOrder.Fields.Item("ProductDetailID").Value)%>" /></td>
        <td width="356">Quantidade :
          <input name="qtidade" type="text" id="qtidade" value="<%=(rsOrder.Fields.Item("estoque_final").Value)%>" size="5" />
          <input type="hidden" name="MM_recordId" value="<%= rsOrder.Fields.Item("ProductDetailID").Value %>" /></td>
      </tr>
      </table>
    <% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsOrder.MoveNext()
Wend
%>
<p>
    <input type="submit" name="Submit" value="Submit" />
  </p>
<input type="hidden" name="MM_update" value="form1">
</form>
<p></p>

  <p>&nbsp;</p>
  <h5></h5></p>
<p>&nbsp;</p>
</body>
</html>
<%
rsOrder.Close()
Set rsOrder = Nothing
%>

Acredito que o problema é gerado porque o comando do update não consegue funcionar já que os campos gerados pelo repeat region tem o mesmo nome.

Não sei como criar nomes diferentes para os campos criados com o repeat region para que o update funcione corretamente. Se alguém souber por favor me ajude.

Sem mais

Fábio

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Sim o campo ProductDetailsID é único . Como poderia fazer para fazer funcionar Deividy??

Estou tentando usar um tuturial que parece que ira servir ele usa um contador e depois monta o comando do update usando ele de uma olhada:

<%@LANGUAGE="VBSCRIPT"%>

<!--#include file="Connections/catvi.asp" -->

<%

Response.Buffer = True

Dim iCount

iCount = Request.Form("Count")

Dim strLink, strID

Dim strSQL

Dim Command1

set Command1 = Server.CreateObject("ADODB.Connection")

Command1.ConnectionString = MM_catvi_STRING

Command1.Open

Dim iLoop

For iLoop = 0 to iCount

strLink = Request.Form("qtidade")

strID = Request(iLoop & ".ID")

strSQL = "UPDATE Estoque SET Estoque = '" & strLink & "'" &_

" WHERE ProductDetailID = " & strID

Command1.Execute strSQL

Next

Command1.Close

Set Command1 = Nothing

Até aproveitando a interação uma coisa que está dando erro aqui é na hora do update tenho o erro de mysmath data.

Até sei onde é mas não sei resolver, no tuturial o código é:

For iLoop = 0 to iCount

strLink = Request(iLoop & ".Link")

strID = Request(iLoop & ".ID")

strSQL = "UPDATE dbo.YourTable SET sCatName = '" & strLink & "'" &_

" WHERE SCAT = " & strID

onde ScatName é uma variavel de texto aí ele usa as comas assim: '" & strLink & "'"

no meu código:

For iLoop = 0 to iCount

strLink = Request.Form("qtidade")

strID = Request(iLoop & ".ID")

strSQL = "UPDATE Estoque SET Estoque = '" & strLink & "'" &_

" WHERE ProductDetailID = " & strID

a variavel Estoque é um número integer teria que alterar as comas dela mas não sei como elas deveriam ficar !!!

Se puder ajudar

Agradeceria

Link para o comentário
Compartilhar em outros sites

  • 0

então calma ai vamos por partes ok

é pegando o seu primeiro exemplo lá

    <table width="705" border="0">
      <tr>
        <td width="49">&nbsp;</td>
        <td width="278">Produto:
          <input name="produtoid" type="text" id="produtoid" value="<%=(rsOrder.Fields.Item("ProductDetailID").Value)%>" /></td>
        <td width="356">Quantidade :
          <input name="qtidade" type="text" id="qtidade" value="<%=(rsOrder.Fields.Item("estoque_final").Value)%>" size="5" />
          <input type="hidden" name="MM_recordId" value="<%= rsOrder.Fields.Item("ProductDetailID").Value %>" /></td>
      </tr>
      </table>

1 = é ProductDetailID é um campo auto numérico?

quando você chama esse campo aqui

<input name="produtoid" type="text" id="produtoid" value="<%=(rsOrder.Fields.Item("ProductDetailID").Value)%>" /></td>

<td width="356">

2 = ele aparece o numero do produto ou o nome?

vamos por partes ok. senão fica difícil de entender!

Link para o comentário
Compartilhar em outros sites

  • 0

1 = é ProductDetailID é um campo auto numérico?

Sim é autonumérico.

quando você chama esse campo aqui

<input name="produtoid" type="text" id="produtoid" value="<%=(rsOrder.Fields.Item("ProductDetailID").Value)%>" /></td>

<td width="356">

2 = ele aparece o numero do produto ou o nome?

Aparece o número !!!

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...