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

Personalizar error ASP-Access

Estas en el tema de Personalizar error ASP-Access en el foro de ASP Clásico en Foros del Web. Hola a todos: Tengo un formulario para insertar datos en una Base de datos a través de ASP, y si se intentan insertar dos registros ...
  #1 (permalink)  
Antiguo 20/04/2005, 11:37
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Pregunta Personalizar error ASP-Access

Hola a todos:

Tengo un formulario para insertar datos en una Base de datos a través de ASP, y si se intentan insertar dos registros con el mismo campo índice, no lo permite. Hasta aquí, todo OK, pero mi pega es que en ese caso devuelve una página realmente fea :-p diciendo:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][Controlador ODBC Microsoft Access] Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el índice, clave principal o relación. Cambie los datos en el campo o los campos que contienen datos duplicados, quite el índice o vuelva a definir el índice para permitir entradas duplicadas e inténtelo de nuevo.

/insertar.asp, line 67


Lo que yo quisiera es hacer que en este caso se mostrara una página diciendo eso mismo, pero con mejor aspecto , que pueda hacer yo mismo.

-gracias-
  #2 (permalink)  
Antiguo 20/04/2005, 11:45
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Usando "on error resumen next" antes de la línea que podría dar ese error y manejandolo:

on error resumen next
' acá va la linea que podría dar error
if err.number > 0 then
' Se produjo un error, así que lo controlamos
Response.Write "Existen errores, por favor blablabla"
Response.End
End if
__________________
...___...
  #3 (permalink)  
Antiguo 20/04/2005, 11:57
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
Puedes ver mas informacion del tema aqui:
On error
Objeto Err

Todas directamente desde Microsoft, que de esto saben algo
__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO
  #4 (permalink)  
Antiguo 20/04/2005, 12:51
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
Aunque lo ideal sería que no ocurriera ese error, que de hecho no debería, ya que los indices o bien son generados, validados y controlados por ti, o son autonumericos.
  #5 (permalink)  
Antiguo 20/04/2005, 13:37
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
por cierto, este error seria al querer modificar un campo llave que no es autonumerico o cuando?
  #6 (permalink)  
Antiguo 22/04/2005, 01:35
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
[
P.S.: He probado lo de Zuwaga y me muestra la página de error "personalizada" y a continuación, debajo, la que aparece "normalmente" como si no hubiera pasado nada. Ya sé, he quitado response.end, pero es que si no, no hace ná de ná ¿?

on error resume next
' acá va la linea que podría dar error
if error.number > 0 then
' Se produjo un error, así que lo controlamos
Response.Write "Existen errores, por favor blablabla"
End if


A ver si a lo largo de la mañana puedo poner aquí el código exacto que estoy usando, con las líneas que tenía ya antes y la sentencia]



El campo es tipo texto pero es campo llave. De hecho es el campo "código" cuyos datos son (serán) del tipo "BCNA10001"; "BCNA10002"; "BCNA10003"; "MADJ20001"; "MADJ20002";... que son códigos que identifican ciudades, oficinas y cuatro dígitos correlativos.

El tema es que diferentes personas en diferentes lugares van a estar metiendo códigos nuevos en diferentes momentos. Se supone que cada oficina tiene su parte única (en Barcelona en la oficina A1 siempre usarán BCNA1XXXX). Pero como nunca se sabe qué clase de torpe vas a tener "a los mandos" de la aplicación, hay que evitar que hagan registros con el mismo código, y advertirlo para que vuelvan atrás y lo cambien.

Antes tenía este proceso automatizado, ya que sólo había un usuario de este sistema, y el código se insertaba en un campo oculto más un autonumérico en access, pero ahora... cada uno lo tiene que meter "a mano".

No sé si me he explicado bien...
  #7 (permalink)  
Antiguo 22/04/2005, 02:24
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
Con el response.end siempre sale el mensaje de error aunque no se produzca ninguno, y sin él, salen las dos cosas: la de error y la que muestra los datos "correctos" como si no hubiera ocurrido el error (pero no se inserta nada en la base de datos)

Código:
'Instanciamos y abrimos nuestro objeto conexion PARA INSERTAR LOS DATOS
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/BD.mdb"))

on error resume next
' acá va la linea que podría dar error
' AQUI EMPIEZA LA SENTENCIA QUE INTRODUCE LOS DATOS

'Ahora creamos la sentencia SQL con la que insertaremos los valores
sSQL="Insert Into registro (codigo,cantidad,...) values ('" & codigo & "','" & cantidad & "',...)"

'Ejecutamos la orden
set RS = conn.Execute(sSQL)

' AQUI TERMINA LA SENTENCIA QUE INTRODUCE LOS DATOS

if error.number > 0 then
' Se produjo un error, así que lo controlamos
Response.Write "<html><head></head><body><p align='center'><font face='Arial' color='#FF0000'><b>ERROR:</b></font></p><p align='center'>&nbsp;</p><p align='center'><font face='Arial'><b>EL CÓDIGO INSERTADO YA EXISTE EN LA BASE DE DATOS.</b></font></p><p align='center'>&nbsp;</p><p align='center'><font face='Arial'><b>POR FAVOR, COMPRUEBE QUE LOS DATOS QUE HA INTRODUCIDO SON CORRECTOS.</b></font></p><p align='center'>&nbsp;</p><p align='center'><input type='button' onclick='history.back()' value='Volver'></p></body></html>"
RESPONSE.END
end if

'cierro esta conexión para poder abrir otra
conn.close

'Instanciamos y abrimos nuestro objeto conexion PARA PRESENTAR LOS DATOS INSERTADOS DESDE LA B.D.
...

¿alguna idea? ¿qué error tonto estoy cometiendo?




-gracias-
  #8 (permalink)  
Antiguo 22/04/2005, 08:34
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
cambia el

if error.number > 0

por

if err <>0
  #9 (permalink)  
Antiguo 22/04/2005, 09:07
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 7 meses
Puntos: 2
¡¡¡¡¡¡¡¡¡¡premio!!!!!!!!!!!!!!!!

El código queda como sigue:

Código:
'Instanciamos y abrimos nuestro objeto conexion PARA INSERTAR LOS DATOS
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../data/BD.mdb"))

on error resume next
' acá va la linea que podría dar error
' AQUI EMPIEZA LA SENTENCIA QUE INTRODUCE LOS DATOS

'Ahora creamos la sentencia SQL con la que insertaremos los valores
sSQL="Insert Into registro (codigo,cantidad,...) values ('" & codigo & "','" & cantidad & "',...)"

'Ejecutamos la orden
set RS = conn.Execute(sSQL)

' AQUI TERMINA LA SENTENCIA QUE INTRODUCE LOS DATOS

if err <> 0 then
' Se produjo un error, así que lo controlamos
Response.Write "<html><head></head><body><p align='center'><font face='Arial' color='#FF0000'><b>ERROR:</b></font></p><p align='center'>&nbsp;</p><p align='center'><font face='Arial'><b>EL CÓDIGO INSERTADO YA EXISTE EN LA BASE DE DATOS.</b></font></p><p align='center'>&nbsp;</p><p align='center'><font face='Arial'><b>POR FAVOR, COMPRUEBE QUE LOS DATOS QUE HA INTRODUCIDO SON CORRECTOS.</b></font></p><p align='center'>&nbsp;</p><p align='center'><input type='button' onclick='history.back()' value='Volver'></p></body></html>"
response.end
end if

'cierro esta conexión para poder abrir otra
conn.close

'Instanciamos y abrimos nuestro objeto conexion PARA PRESENTAR LOS DATOS INSERTADOS DESDE LA B.D.
Set conn = Server.CreateObj...
Muchas gracias a sjam7 y Al_Zuwaga . (Y a Myakyre tb, por su aportación)
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 01:10.