Foros del Web » Programando para Internet » ASP Clásico »

Actualizar Varios Registros con un Boton Submit

Estas en el tema de Actualizar Varios Registros con un Boton Submit en el foro de ASP Clásico en Foros del Web. Buenas amigos de foros del web.....tengo el siguiente problema que no puedo resolver : necesito hacer una actualizacion de varios registros en forma simultanea...asi se ...
  #1 (permalink)  
Antiguo 22/12/2008, 13:17
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Actualizar Varios Registros con un Boton Submit

Buenas amigos de foros del web.....tengo el siguiente problema que no puedo resolver : necesito hacer una actualizacion de varios registros en forma simultanea...asi se ve el formulario :


la idea mia es que al ir cambiando los "valores" de "descripcion" y precio se realice una actualizacion en forma multiple tomando como valor a modificar el campo "codigo"...no se ....a traves de un bucle for tal vez...pero no se como hacer algo asi.....alguien podria darme una idea de como hacer algo asi ??
De antemano muchas gracias
  #2 (permalink)  
Antiguo 22/12/2008, 14:21
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Actualizar Varios Registros con un Boton Submit

No esta nada complicado ...

Una forma sería colocando el mismo nombre para todos los controles de clave, el mismo para los de descripción y el mismo para los de precio

De esta forma recibirías tres cadenas con todos los valores separados por comas, por ejemplo el de Clave te llegaría así: "0124578, 3245787, 7845126, 9865324, 3245781"

Entonces teniendo esas cadenas los conviertes en arreglos con un SPLIT y recorres el de claves para hacer el update en un ciclo

vecClaves = split(request("Claves"),",")
vecDescripciones = split(request("Descripciones"),",")
vecPrecios = split(request("Precios"),",")
for i=0 to UBound(vecClaves)-1
cmd.execute "update table set descripcion = '" & vecDescripciones(i) & "', precio = " & vecPrecios(i)
next

Claro que debes de validar que no te manden campos del formulario vacíos, por ejemplo, para que coincidan el número de elementos de las tres cadenas; que no tenga deshabilitado el javascript, etc, etc

La idea es esa.

Puedes hacerlo de otras formas, esta es solo una alternativa

saludos
  #3 (permalink)  
Antiguo 22/12/2008, 14:46
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Actualizar Varios Registros con un Boton Submit

primero que todo gracias por tu pronta respuesta Myakire, y bueno, como dices los nombres de clave (o codigo), descripcion y precio tienen el mismo nombre en el formulario....de hecho este es el codigo de ese formulario :

Código asp:
Ver original
  1. <%
  2.  
  3.    
  4. set Cnn=Server.CreateObject("ADODB.Connection")
  5.     set rs=Server.CreateObject("ADODB.Recordset")
  6.     Cnn.Open Session("cnx")
  7.  
  8.  
  9. strSQL = "SELECT * FROM FACPVAL "
  10.  
  11. set rs = Cnn.Execute(strSQL)
  12.          
  13.        
  14. %>
  15.  
  16.  
  17. <form name="frmClientes" method="post" action="validar_factura.asp">
  18.  <table >
  19.  
  20. <tr>    
  21. <td width="201" height="32">Código</td>
  22. <td width="465"> Descripcion: </td>
  23. <td width="289">Precio Costo:</td>
  24.  
  25. <tr>
  26.  
  27. <%do  while not rs.EOF %>
  28. <td width="201" >
  29. <input name="codigo" value="<%=RS.Fields("codigo")%>" size=12 > </td>
  30.          
  31. <td width="465">
  32. <input name="detalle" value="<%=RS.Fields("detalle")%>" size=40></td>
  33.  
  34. <td width="289">
  35. <input  name=precio value="<%=RS.Fields ("precio")%>"  ></td>
  36.    </tr>
  37.  
  38. <%rs.MoveNext
  39.       loop
  40.       %>
  41.  
  42.     <tr>
  43.        
  44. <td >
  45.        
  46. <input id=submit1 type=submit value=Aceptar name=submit1>
  47.  
  48.          </div></td>
  49.       </tr>
  50.     </table>
  51.   </div>
  52. </FORM>


y bueno...al recibir los datos los estaba haciendo asi :

validar_factura.asp
Código asp:
Ver original
  1. <%
  2.  
  3. if Not IsEmpty(Request.Form("codigo")) then
  4.      codigo = Request.Form("codigo")
  5.  
  6.     codigo = "'" & replace(codigo,",","','") & "'"
  7.  
  8. end if
  9.  
  10. if Not IsEmpty(Request.Form("detalle")) then
  11.      detalle = Request.Form("detalle")
  12.   end if
  13.  
  14. if Not IsEmpty(Request.Form("precio")) then
  15.      precio = Request.Form("precio")
  16.   end if
  17.  
  18.  
  19. set Cnn = Server.CreateObject("ADODB.Connection")
  20. set rs = Server.CreateObject ("ADODB.Recordset")
  21. Cnn.Open Session("cnx")
  22.  
  23.  
  24. strSQL = "UPDATE FACPVAL set descripcion =("&detalle&"), precio = ("&precio&")  where codigo in ("&codigo&")"
  25.  
  26.  
  27. RESPONSE.WRITE (strSQL)
  28.  
  29. %>

y Bueno...al imprimir en pantalla la consulta me aparece esto :


Código PHP:
UPDATE FACPVAL 
set descripcion 
=(BANDEJA EVAPORACION EMBRACOCT ALIM PLACA 1 R15), precio = (1901766
where codigo in ('001251082',' 009232214'
Y bueno...en el ejemplo que tu colocas del split no veo la clausula WHERE....sera que no va ??? aps....y siempre los datos de los 3 campos vienen llenos....(ya controlo en otro formulario eso....)
  #4 (permalink)  
Antiguo 22/12/2008, 17:46
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Actualizar Varios Registros con un Boton Submit

ups!, sorry, (¿no te digo Shiryu ?) se me pasó ese "pequeño" detalle del WHERE

No vi a detalle tu código pero por esa instrucción UPDATE que pones veo que no estas haciendo el ciclo que puse en mi ejemplo, con ese ciclo se ejecuta por cada una de claves una instrucción UPDATE; prúebalo.

Saludos
  #5 (permalink)  
Antiguo 22/12/2008, 19:21
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Respuesta: Actualizar Varios Registros con un Boton Submit

Cita:
Iniciado por Myakire Ver Mensaje
ups!, sorry, (¿no te digo Shiryu ?) se me pasó ese "pequeño" detalle del WHERE

....
Siiiiii Senseeeeiiii

Comprendo la sabidirudira que Oszzz muestra



Ohhh Waaa u saiiii.... ohhh Wha u sayyyy



__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #6 (permalink)  
Antiguo 22/12/2008, 20:38
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Actualizar Varios Registros con un Boton Submit

compadre Myakire....creo que vamos bien....este es el nuevo codigo :
Código asp:
Ver original
  1. <%
  2.  
  3. if Not IsEmpty(Request.Form("codigo")) then
  4.      codigo = Request.Form("codigo")
  5.  
  6.      codigo = "'" & replace(codigo,",","','") & "'"
  7.  
  8. end if
  9.  
  10. if Not IsEmpty(Request.Form("detalle")) then
  11.      detalle = Request.Form("detalle")
  12.   end if
  13.  
  14. if Not IsEmpty(Request.Form("precio")) then
  15.      precio = Request.Form("precio")
  16.   end if
  17.  
  18.  
  19. set Cnn = Server.CreateObject("ADODB.Connection")
  20. set rs = Server.CreateObject ("ADODB.Recordset")
  21. Cnn.Open Session("cnx")
  22.  
  23.  
  24. vecClav = split(request("codigo"),",")
  25. vecDesc = split(request("detalle"),",")
  26. vecPrec = split(request("precio"),",")
  27. for i=0 to UBound(vecClav)-1
  28.  
  29. Cnn.execute "update FACPVAL set detalle = '" & vecDesc(i) & "', precio = '" & vecPrec(i)&"' where codigo = '"& vecClav(i)&"' "
  30. next
  31.  
  32.  
  33. %>

el problema es que aun cuando le mando 2 registros distintos (con 2 codigos) solo me realiza el update en el primer registro y no en el segundo....ya hice un response.write y estoy seguro que el formulario recibe correctamente esos 2 valores....que podra ser ??
  #7 (permalink)  
Antiguo 23/12/2008, 07:34
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Actualizar Varios Registros con un Boton Submit

Cita:
el problema es que aun cuando le mando 2 registros distintos (con 2 codigos) solo me realiza el update en el primer registro y no en el segundo
Quítale el -1 al for i=0 to UBound(vecClav)-1

Saludos
  #8 (permalink)  
Antiguo 23/12/2008, 08:49
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Actualizar Varios Registros con un Boton Submit

compadre....
ahora el codigo quedo asi :

Código asp:
Ver original
  1. <%
  2.  
  3. if Not IsEmpty(Request.Form("codigo")) then
  4.      codigo = Request.Form("codigo")
  5.       codigo = "'" & replace(codigo,",","','") & "'"
  6.  
  7. end if
  8.  
  9.  if Not IsEmpty(Request.Form("detalle")) then
  10.      detalle = Request.Form("detalle")
  11.     detalle = "'" & replace(detalle,",","','") & "'"
  12. end if
  13.  
  14. if Not IsEmpty(Request.Form("precio")) then
  15.      precio = Request.Form("precio")
  16.     precio = "'" & replace(precio,",","','") & "'"
  17. end if
  18.  
  19. set Cnn = Server.CreateObject("ADODB.Connection")
  20. set rs = Server.CreateObject ("ADODB.Recordset")
  21. Cnn.Open Session("cnx")
  22.  
  23.  
  24. vecClav = split(request("codigo"),",")
  25. vecDesc = split(request("detalle"),",")
  26. vecPrec = split(request("precio"),",")
  27. for i=0 to UBound(vecClav)
  28.  
  29. strSQL=  "update FACPVAL set detalle = '"&vecDesc(i)&"', precio = '"&vecPrec(i)&"' where codigo = '"&vecClav(i)&"' "
  30.  
  31. set rs = Cnn.Execute(strSQL)
  32. next
  33.  
  34. %>


y pasa lo mismo.... no se que mas puedo hacer...probe cambiar

solo me actualiza el primer campo y el segundo nada....no cambia ningun valor.


Ademas pasa algo extraño...ahora al hacer un response.write (strSQL) me aparece asi la consulta :



Código asp:
Ver original
  1. update FACPVAL set detalle = 'bandeja embraco', precio = '60' where codigo = '001251082'
  2. update FACPVAL set detalle = ' motor', precio = ' 6000' where codigo = ' 009232214'

Última edición por darkmcloud; 23/12/2008 a las 10:39
  #9 (permalink)  
Antiguo 23/12/2008, 11:49
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 7 meses
Puntos: 27
Respuesta: Actualizar Varios Registros con un Boton Submit

tock tock

saludos a todos

quizas sea este espacio antes de el codigo ' 009232214'

quizas por eos no actualiza
__________________
JuanRa Pérez
San Salvador, El Salvador
  #10 (permalink)  
Antiguo 23/12/2008, 12:04
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Actualizar Varios Registros con un Boton Submit

pero que sera....analizando el codigo en el primer registro esta bien hecha la consulta...no asi en el segundo que como dice JuanRa Pérez esta ese espacio en codigo ' 009232214'...tratare de pensar que es lo que genera ese error en el segundo pero no en el primer registro....
Mirando mas el response.write tambien pasa:

update FACPVAL set detalle = ' motor', precio = ' 6000' where codigo = ' 009232214'
o sea al parecer al separar el split le agrega a cada valor el espacio...no entiendo mucho de split....

Última edición por darkmcloud; 23/12/2008 a las 12:12
  #11 (permalink)  
Antiguo 23/12/2008, 12:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Actualizar Varios Registros con un Boton Submit

Bueno, el espacio lo quitas con un TRIM, eso no es problema:


strSQL= "update FACPVAL set detalle = '"&trim(vecDesc(i))&"', precio = '"&trim(vecPrec(i))&"' where codigo = '"&trim(vecClav(i))&"' "

Salud!2
  #12 (permalink)  
Antiguo 23/12/2008, 13:05
 
Fecha de Ingreso: octubre-2007
Mensajes: 191
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Actualizar Varios Registros con un Boton Submit

compadre.....para concluir....el trim hizo el milagro!!!
El Codigo funciona al 100%
Muchas Gracias Y Hasta Pronto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:38.