FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
¿Qué base de datos?
|
#3
|
|||
|
|||
Es SQL Server 2008
|
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
¿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:
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. |
#6
|
|||
|
|||
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.
|
#7
|
||||
|
||||
Cita:
Creo que deberias pensar mejor lo de la funcion... Si bien la base te envia un mensaje cuando el codigo de registro esta duplicado, para un sistema en donde se ingresa un registro con grandes cantidades de información... (por unos 30 0 50 campos por lo minimo)... haras que el usuario digite todos los campos.... y cuando presiones guardar se de cuenta que ya existe? Creo que lo mejor es ingresar el campo clave (codigo, campo clave o como lo llames) y preguntar si en la base existe algun registro con dicho codigo.. si existe lanzas el mensaje que existe un registro... en caso contrario sigues ingresando.... Salu2
__________________
BlueSteel |
#8
|
||||
|
||||
Cita:
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. |
#9
|
||||
|
||||
Cita:
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. |
#10
|
||||
|
||||
+1 Al González
+1 Neftalí |
#11
|
||||
|
||||
Cita:
1. Preguntar la clave. 2. Insertar un nuevo registro con esa clave. 3. Esperar... (a ver qué dice el servidor ) 4. Presentar un formulario para llenar los datos restantes. 5. Hacer el UPDATE a la base. Por cierto, además del try-except también puede usarse el evento OnPostError del DataSet. // Saludos |
#12
|
||||
|
||||
Y uno más para Casimiro +1. Por darme su voto.
|
#13
|
|||
|
|||
Estoy usando ADODataset no entendi muy bien el codigo que me dio neftali en donde lo debo colocar para capturar y como lo paso al mensaje que yo deseo presentar.
Les agradezco mucho suayu da y opinion, ah y si yo tambien soy de la opinion de usar lo que ya hace la base de datos en lugar de volvr a programar lo que ya esta programado y verificado. |
#14
|
|||
|
|||
Ya logre poner mi mensaje cuando da el error la Base de Datos puse el siguiente codigo en el evento OnPostError y si aparece mi mensaje pero despues de que le doy aceptar aparece enseguida el mensaje de error de la base de datos, ahora mi pregunta es como le hago para que solo aparezca mi mensaje??, y otra cuestion y si solo quisiera interceptar ciertos errores de la base de datos se podria hacer??
|
#15
|
||||
|
||||
Eso es porque lo has ejecutado desde delphi, pruébalo desde fuera, verás
|
#16
|
||||
|
||||
Cita:
Tool / Debugger Options / Languages Exceptions / Stop on Delphi Exceptions
__________________
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. |
#17
|
||||
|
||||
Y te acuerdas de activarlo después, ya que no volverás a ver un error, aunque exista.
|
#18
|
|||
|
|||
Y como seria desde fuera??
|
#19
|
|||
|
|||
Ejecutas directamente desde Windows el ejecutable generado por Delphi, no desde el IDE...
Saludos... |
#20
|
|||
|
|||
Me sigue apareciendo lo mismo primero el mensaje y luego el que manda la base de datos. Alguna sugerencia??
|
|
|
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 |
|