Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Como capturar mensaje cuando se intenta duplicar una clave primaria de una BD (https://www.clubdelphi.com/foros/showthread.php?t=73903)

Al González 26-05-2011 18:38:04

Action := daAbort; ;)

RedVenom 26-05-2011 18:42:25

lo que hice fue cambiar
Código Delphi [-]
MessageDlg('MENSAJE DE ERROR: '+E.Message, mtWarning, [mbOK], 0);
Por:
Código Delphi [-]
E.Message:="Mensaje de Error Capturado

Pero ya no creo yo mi mensaje lo unico que puedo hacer es cambiarle el texto al mensaje de error que manda la base de datos ahora lo que quisiera es solo cambiarlo cuando sea algun tipo de error especifico.

RedVenom 26-05-2011 18:46:27

Con la instrucción:
Código Delphi [-]
Action := daAbort;
Ya logro hacer que solo aparez ca mi mensaje, ya solo me faltaria que solo apareciera dependiendo del mensaje de error recibido.
Les agradezco infinitamente su ayuda.

Al González 26-05-2011 19:26:42

Eres un ejemplo de forista paciente y decidido. Te dejas ayudar muy bien, eso da gusto. :)

Cita:

Empezado por RedVenom (Mensaje 401560)
[...] ya solo me faltaria que solo apareciera dependiendo del mensaje de error recibido.

Sabes, los objetos EDatabaseError no contienen información adicional que te permita discernir el tipo de error que ocurrió, de hecho la clase EDatabaseError es prácticamente igual que Exception (al menos hasta Delphi 7). Miré el código del método virtual TCustomADODataSet.InternalPost (ADODB.pas) y descubro que la excepción arrojada por ADO es sustituida por un simple EDatabaseError. Ignoro si la excepción original u otro tipo de información puede ser consultada mediante otros caminos (como la interfaz ADODataSet1.Recordset o el objeto TADOConnection), pero es a través del propio mensaje de texto (analizando su contenido) como podrás averiguar el tipo de error ocurrido.

De hecho así lo tuve que hacer hace tiempo con dbExpress y Firebird, porque desafortunadamente en las excepciones no venían incluidos los códigos de error nativos del motor.

Casimiro Notevi 26-05-2011 19:37:35

En firebird 1.0 (no sé con versiones recientes) algunos de los errores que devolvía son estos:

Cita:

-530 : Violación de clave foránea.
-625 : Dato no válido.
-803 : Clave primaria repetida.
-832 : No existe registro relacionado.
-836 : Excepción de la BD.;
-913 : 'deadlock'


La franja horaria es GMT +2. Ahora son las 04:02:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi