Mensaje de error tras ejecutar consulta sql y borrar datos. Parámetros de un query string en asp

Fíjate que tengo un problema, en una página llamada borrar_empresa2 le paso 3 parámetros de un query string que son el nombre de la empresa, código de la empresa y código de la rama a la que pertenece la empresa, luego tengo un botón llamado "borrar" cuando yo aprieto ese botón se debería de ejecutar una consulta sql, y realmente se ejecuta, o sea borra la empresa elegida, pero al mismo tiempo me manda este mensaje de error:
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'cod_empresa = AND cod_rama ='.
/swapp/Copy of administracion/agregar_producto2.asp, line 69
No se que pueda estar pasando, te envío la consulta tal y como la tengo, por favor ayudame:
consulta = "SELECT * FROM empresa WHERE cod_empresa = " & request.QueryString("cod_empresa")& " AND cod_rama = "& request.QueryString("cod_rama") & ";"
recset.Open consulta, conexionDB, adOpenKeyset, adLockPessimistic, adCmdText
If Not recset.eof Then
recset.movefirst
recset.delete adAffectCurrent
End If
Tambien trate con "delete from empresa..." pero no me funciona
Otra cosa es que cuando ejecute el borrado quisiera que al mismo tiempo se redirigiera a otra pantalla (borrar_empresa1) y para eso al final del archivo le pongo un response. Redirect "borrar_empresa1.asp" pero cuando se lo pongo, en vez de entrar a borrar_empresa2, solo me sale borrar_empresa1 y nunca aparece el segundo archivo o sea borrar empresa2.
6

6 respuestas

Respuesta
1
Primero lo primero.
El hecho de que en el mensaje de error salga 'cod_empresa = AND cod_rama =', implica que la página no está leyendo los valores del Request.QueryString ("cod_empresa") y ("cod_rama"), y por eso no aparece el valor de los códigos. Debes revisar que esos valores lleguen de verdad. No entiendo porqué se ejecuta la consulta SQL (no debería). Me da la impresión de que tienes otro problema por ahí que no has detectado. Te recomiendo que verifiques tres cosas: 1) Que es .QueryString y no .Form. 2) Que los códigos son numéricos. 3) El valor de la sentencia final, es decir escríbela antes de ejecutarla, así Response.Write consulta.
Verifica eso y si no detectas nuevos errores y continúa fallando, vuelves y me cuentas.
Una cosa más: a mí no me gusta preguntar Not recset. Eof porque eso significa "¿no estás en el final?", yo prefiero preguntar recset. Bof AND recset. Eof que significa "¿estás vacío?", ahí te dejo el dato.
Ahora lo segundo.
No entiendo bien si debe ir primero a borrar_empresa1.asp o la borrar_empresa2.asp. Sin embargo, creo que no debes colocar el Response. Redirect al final porque sí, sino metido en algún lado que implique que debe borrar otra cosa, es decir que debes hacer el redireccionamiento sólo si pasan tales y tales y tales cosas. Ahora bien, para que aquella página borre lo que debe borrar, debes pasarle los parámetros, es decir debes formar el query string adecuadamente, ¿con el? Después del nombre de la página y con el & que separa las parejas nombre-valor. Si no me entiendes de qué estoy hablando, escríbeme otra vez.
William. [email protected]
Respuesta
1
Pues parece ser un error de que no le están llegando los parámetros. Haz esto a ver que sale:
consulta = "SELECT * FROM empresa WHERE cod_empresa = " & request.QueryString("cod_empresa")& " AND cod_rama = "& request.QueryString("cod_rama") & ";"
response.write consulta
response.end
Recset. Open consulta, conexionDB, adOpenKeyset, adLockPessimistic, adCmdText
...
Lo que hará el código es mostrar la consulta, así veras que parámetros se están pasando y luego con el end se termina la ejecución de la página, es una forma de depurar de errores. Avisame con lo que salga y vemos la causa.
Hola, hice lo que me dijiste y si me muestra el código de empresa y de rama correctos, pero cuando le comento el response.end que le pusiste (según yo para que ejecute el borrado) me sigue sacando el mismo mensaje:
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'cod_empresa = AND cod_rama ='.
/swapp/Copy of administracion/agregar_producto2.asp, line 72
No se que pase, porque los parámetros los esta pasando bien, a como debería de ser.
¿Alguna idea?
Pues parece ser un fallo en la consulta, haz lo siguiente, pon el código anterior, copias la consulta, después abres access y realiza esa consulta desde el propio access a ver que hace.
Respuesta
1
Lo siento por la demora amigo, pero no pude responder antes...
El error que te arrija lo dice todo... cuando creas la consulta y la dejas en un string... esta consulta no está bien... fíjate en el error:
Syntax error (missing operator) in query expression 'cod_empresa = AND cod_rama ='.
Entre cod_empresa y AND debería haber datos, y no los hay. Esto me hace pensar que cuando recibes el querystring lo haces con otro nombre, revisa los nombres...
Lo otro...
Para que funcione el Responde. Redirect debe ser el primer llamado al Responde que hagas. Es decir, sin nunca antes haber enviado datos al cliente dentro de esa página.
OK.
Respuesta
1
Enviame los archivos asp y la base de datos para ver en que es que falla, ya que necesito más información y probarla para así darte una respuesta.
La puedes mandar a [email protected], no me los mandes comprimidos, por la información (de la bd), no te preocupes que no creo que me sirva.
Respuesta
1
En primer lugar, en vez de request. Querystring(campo) utiliza request(campo). No te lo sabría explicar, pero es lo que hago yo cuando me pasa lo mismo que a ti.
En segundo lugar, no te salta a la 2ª página porque se para en el error de la 1ª.
Respuesta
1
Prueba a cambiar el cursor y el bloqueo:
AdOpenDynamic, adLockOptimistic
Yo el delete se lo paso a la conexión, es más rápido y más sencillo:
'declaras el objeto connection....
con.ConnectionString = ".."
etc.
con.Execute = "DELETE FROM TBL_tabla where ..."
Y ya lo tienes.
El response. Redirect te lo está haciendo bien, siempre puedes poner un botón en la segunda página, un mensaje aclarativo "su registro ha sido eliminado." pulse este botón para volver a la página de inicio, etc. No tengo claro que te refirieras exactamente a esto (la segunda duda), acláramelo si no es así. Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas