Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2011
RedVenom RedVenom is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tabasco, Mexico
Posts: 110
Poder: 21
RedVenom Va por buen camino
Como capturar mensaje cuando se intenta duplicar una clave primaria de una BD

Quisiera saber si hay alguna forma de capturar el mensaje de error que manda la base de datos cuando se intenta duplicar el valor de una llave primaria, esto es para mostrarle un mensaje personalizado al usuario de la aplicacion en lugar del que mande el sistema.
Les agradezco su ayuda de antemano.
Responder Con Cita
  #2  
Antiguo 24-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué base de datos?
Responder Con Cita
  #3  
Antiguo 24-05-2011
RedVenom RedVenom is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tabasco, Mexico
Posts: 110
Poder: 21
RedVenom Va por buen camino
Es SQL Server 2008
Responder Con Cita
  #4  
Antiguo 24-05-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Porque no creas una función para saber si existe tal dato en la tabla, no creo que sea buena idea que la base de datos te devuelva un error de la existencia de dicho dato.

un saludo.
Responder Con Cita
  #5  
Antiguo 24-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Cómo estás accediendo? ¿ADO, DBExpress?

Utiliza un Try..Except y captura el mensaje de vuelta. Segun la clase podrás acceder al código o en su defecto al mensaje; A partir de ahí podrás personalizar el mensaje:

Código Delphi [-]
try
  ADOQuery1.Update;
except
  on E:EOLEException do begin
    ==> E.ErrorCode    Codigo de error.
    ==> E.Message      Mensaje de error
  end;
end;

Esto es más o menos lo que puedes utilizar para ADO; Para DbExpress algo similar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 24-05-2011
RedVenom RedVenom is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tabasco, Mexico
Posts: 110
Poder: 21
RedVenom Va por buen camino
Es que la base de datos sola me devuelve ese error cuando intento duplicar una llave primaria lo que deseo es interceptarlo para que yo muestre mi propio mensaje, no me convence lo de crear una funcion tendria que estar llamando a la funcion cada vez que agrego un registro cuando la base de datos ya te da el mensaje.
Responder Con Cita
  #7  
Antiguo 25-05-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por olbeup Ver Mensaje
Porque no creas una función para saber si existe tal dato en la tabla, no creo que sea buena idea que la base de datos te devuelva un error de la existencia de dicho dato.
Para mí, de hecho, es mejor que sea el motor de base de datos quien valide ese tipo de cuestiones y capturar desde la aplicación el mensaje de excepción, convirtiéndolo en algo amigable y entendible por el usuario.

Con una función de verificación no hay garantía de que, entre la llamada a la función y el envío de los datos, otro programa o usuario ocupe el valor que no se quiere duplicar.

Una solución como la de Neftali me parece la más adecuada (o usar el evento OnReconcileError en caso de que RedVenom esté utilizando objetos TClientDataSet). Esperemos a ver qué nos dice.

Saludos.
Responder Con Cita
  #8  
Antiguo 25-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Al González Ver Mensaje
Para mí, de hecho, es mejor que sea el motor de base de datos quien valide ese tipo de cuestiones y capturar desde la aplicación el mensaje de excepción, convirtiéndolo en algo amigable y entendible por el usuario.
+1

Correcto. Muy correcto.

Primero porque estaremos haciendo trabajo doble.
Segundo porque si ya hay alguien que saber hacer ese trabajo, mejor que lo haga él (SGBD).
Tercero, porque los métodos de hacerlo del SGDB son mucho más eficientes que hacerlo desde el cliente (delphi).
Cuarto, porque hacerlo nosotros no es tan sencillo como parece, por los temas de concurrencia que comenta Al.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cuando elegir una particion primaria y cuando una extendida o logica JoAnCa Varios 1 17-05-2008 23:35:43
Mensaje para no duplicar la clave primaria de la base de datos ivansito PHP 8 08-08-2007 00:53:51
Como copiar un registro cambiando el campo de clave primaria Javi2 SQL 2 17-09-2004 20:49:50
cambiar la clave primaria con SQL User_Baja_2 SQL 8 18-06-2004 08:41:31
cambiar una clave primaria User_Baja_2 SQL 3 06-10-2003 18:03:38


La franja horaria es GMT +2. Ahora son las 21:54:10.


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
Copyright 1996-2007 Club Delphi