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

Problemas Al Actualizar Bd!!!

Estas en el tema de Problemas Al Actualizar Bd!!! en el foro de ASP Clásico en Foros del Web. Hola a todos, tengo un problema, tengo este código, que no me da ningun error, pero no funciona como debería. Esta página, graba pedidos, la ...
  #1 (permalink)  
Antiguo 20/12/2002, 09:49
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 22 años, 5 meses
Puntos: 0
Problemas Al Actualizar Bd!!!

Hola a todos, tengo un problema, tengo este código, que no me da ningun error, pero no funciona como debería.

Esta página, graba pedidos, la idea, que mire las líneas del formulario y si han puesto cantidad, las graba en una tabla.

Hasta aquí ningún problema, lo que pasa es que ahora he puesto que si la línea existe, en vez de crear otra linea, añada la cantidad a la linea existente. Para saber que es unica, tienen que cumplirse que la referencia, cliente y fecha sean igual, si no crea la línea.

Siempre me crea una linea, no me añade. Aquí teneis el trozo de código.

if Request.form ("Referencia1") <> "" then
set fami = Request.Form("familia1")
Session ("wfami") = fami
SQL1 = "SELECT * FROM per_art where familia='" & fami & "'"
RS1.Open SQL1, BD, 1, 2
conta = RS1.RecordCount


For p = 1 to conta

If Request.form ("cantidad"&p) <> "" then
ref = request.form ("referencia"&p)
SQL2 = "SELECT * FROM per_ped where codigo=" & session ("cli") & " and referencia='" & ref & "' and fecha=" & session ("fecha")
RS2.Open SQL2, BD, 2, 3, 1
if RS2.eof then
RS2.AddNew
RS2.Fields("codigo") = Session ("cli")
RS2.Fields("Referencia") = Request.Form ("Referencia"&p)
RS2.Fields("Cantidad") = Request.Form ("Cantidad"&p)
RS2.Fields("Precio") = Request.Form ("Precio"&p)
RS2.Fields("Fecha") = Session("Fecha")
RS2.Fields("descripcion") = Request.Form ("descripcion"&p)
else
wcantidad = RS2.Fields("cantidad")
RS2.Fields("cantidad") = wcantidad + request.form ("cantidad"&p)
end if
RS2.update
RS2.close
End If
next


Os agradecería toda la ayuda posible. GRACIAS.
  #2 (permalink)  
Antiguo 20/12/2002, 12:23
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 22 años, 5 meses
Puntos: 0
Si acaso les comento las líneas !!!

Esta es la página catalogo.asp, la puedo llamar desde el menu, pasandole el parametro familia o desde la misma página, para grabar el pedido.

Primero miro si la referencia1 (sería el primer dato del formulario), tiene algún dato, si no vale nada, es que vengo desde el menu, por lo que solo tengo que poner el catálogo.

if Request.form ("Referencia1") <> "" then

Alguna varibles que he puesto, podría ponerla directamente, pero para probar si tengo el error en algún valor, lo hago así.

Abro la BD y miro registros que tiene esa familia con la condición familia.

set fami = Request.Form("familia1")
Session ("wfami") = fami
SQL1 = "SELECT * FROM per_art where familia='" & fami & "'"
RS1.Open SQL1, BD, 1, 2
conta = RS1.RecordCount


Hago un bucle y hago una pasada por cada registro que tiene la tabla.

For p = 1 to conta

Si cantidad&p no tiene ningún valor, no hago nada, si tiene algún valor entro en el if.

If Request.form ("cantidad"&p) <> "" then

Hago el select con los valores cliente, referencia y fecha.

ref = request.form ("referencia"&p)
SQL2 = "SELECT * FROM per_ped where codigo=" & session ("cli") & " and referencia='" & ref & "' and fecha=" & session ("fecha")
RS2.Open SQL2, BD, 2, 3, 1


Si el recordset, es eof, quiere decir que no hay ningún registro que cumpla con estas condiciones, por lo que añado un registro.

if RS2.eof then
RS2.AddNew
RS2.Fields("codigo") = Session ("cli")
RS2.Fields("Referencia") = Request.Form ("Referencia"&p)
RS2.Fields("Cantidad") = Request.Form ("Cantidad"&p)
RS2.Fields("Precio") = Request.Form ("Precio"&p)
RS2.Fields("Fecha") = Session("Fecha")
RS2.Fields("descripcion") = Request.Form ("descripcion"&p)


Si existe un registro con estas condiciones, sumo la cantidad a la que ya tenia.

else
wcantidad = RS2.Fields("cantidad")
RS2.Fields("cantidad") = wcantidad + request.form ("cantidad"&p)
end if


Aqui guardo el registro, tanto si es uno nuevo, como si es añadido

RS2.update
RS2.close
End If

Vuelvo a leer la siguiente linea del formulario

next

Bueno, pues esto no da errores (visibles), pero solo me crea registros nuevos, tanto si existe como si no. Es como si siempre fuera eof. Es posible que la fecha que tengo en la variable de session, creada así

Dia = Day(Date)
Mes = Month(Date)
Anyo = Year(Date)
Session ("Fecha") = Dia & "/" & Mes & "/" & Anyo


Sea diferente que la que guarda la BD?
  #3 (permalink)  
Antiguo 21/12/2002, 21:05
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
Si, es muy probable q sea las fechas estan en <> formato.

Guarda la fecha session en formato mdy, o sino creas una funcion para eso muy util :

Function MDY(fecha)
MDY = Month(fecha) &"/"& Day(fecha) &"/"& Year(fecha)
End Function

luego en la sentencia sql lo pasas como "#" & MDY(Now()) & "#"

Ahora, si la fecha de session es = hoy, entonces directamente puedes pasar o asignar fecha a Now() :

"SELECT . . . and fecha=Now()"

SQL maneja las fechas siempre en formato americano mdy, entonces si las manejas en nuestro formato, siempre antes debes convertirlas, pej., con la funcion q te puse.

bye.
  #4 (permalink)  
Antiguo 23/12/2002, 03:12
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 22 años, 5 meses
Puntos: 0
Hola, he probado lo que me decias, y no me funciona. Igualmente, siempre trabajaba con la fecha de session, (la fecha que grabo, la de comparar, ...) para no tener este tipo de problemas.

Si es lo de la fecha, es que al recuperarla de la BD, me la cambia. En la BD (access), el campo es de fecha corta (DD/MM/YYYY).

He hecho esta prueba, Le he quitadi la fecha al select, y luego paso la fecha de la tabla al DD/MM/YYYY y hago la comparación y tampoco funciona.



For p = 1 to conta

If Request.form ("cantidad"&p) <> "" then ref = request.form ("referencia"&p)
SQL2 = "SELECT * FROM per_ped where codigo=" & session ("cli") & " and referencia='" & ref & "'"
RS2.Open SQL2, BD, 2, 3, 1


Hasta aquí igual que antes, excepto que he quitado la fecha del where.

Luego si es final de fichero, creo un registro nuevo.

if RS2.eof then
RS2.AddNew
RS2.Fields("codigo") = Session ("cli")
RS2.Fields("Referencia") = Request.Form ("Referencia"&p)
RS2.Fields("Cantidad") = Request.Form ("Cantidad"&p)
RS2.Fields("Precio") = Request.Form ("Precio"&p)
RS2.Fields("Fecha") = Session("Fecha")
RS2.Fields("descripcion") = Request.Form ("descripcion"&p)
else


Si no, paso a "fecha" la fecha del campo.

fecha = Day(RS2.Fields("fecha")) & "/" & Month(RS2.Fields("fecha")) & "/" & Year(RS2.Fields("fecha"))

Si la fecha es igual a la fecha de session, sumo la cantidad.

if fecha = Session("fecha") then
wcantidad = RS2.Fields("cantidad")
RS2.Fields("cantidad") = wcantidad + request.form ("cantidad"&p)
else


Si la fecha no es igual, añado otro registro.

RS2.AddNew
RS2.Fields("codigo") = Session ("cli")
RS2.Fields("Referencia") = Request.Form ("Referencia"&p)
RS2.Fields("Cantidad") = Request.Form ("Cantidad"&p)
RS2.Fields("Precio") = Request.Form ("Precio"&p)
RS2.Fields("Fecha") = Session("Fecha")
RS2.Fields("descripcion") = Request.Form ("descripcion"&p)
end if
End if


Grabo y continuo.

RS2.update
RS2.close
End If
next


Ahora la fecha de session, está así:


fecha=now()
Session ("fecha") = Day(fecha) & "/" & Month(fecha) & "/" & Year(fecha)


Ahora mismo. ya no se por donde mirar, le he dado mil vueltas y he cambiado el codigo otras mil, agradecería cualquier ayuda.

Creo que está bien, pero algo se me está escapando.
  #5 (permalink)  
Antiguo 23/12/2002, 03:18
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 22 años, 5 meses
Puntos: 0
GRACIAS, ya funciona!!!

Lo he hecho como os he explicado la última vez,

no me funcionaba, por que al asignar la fecha de session me he equivocado y he escrito "echa" en vez de "fecha".

Lo he cambiado, he grabado y a correr...
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 16:47.