Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   verificar existencia antes de insertar (https://www.clubdelphi.com/foros/showthread.php?t=53977)

sidneyb 05-03-2008 20:57:28

verificar existencia antes de insertar
 
Buenas tardes, tengo una duda, hace rato que no toco delphi y se me han ido unas cositas por falta de practica. Quiero insertar una serie de datos en una tabla, pero antes me gustaria comprobar si esos datos ya existen, especifico; Quiero insertar un numerocuenta, mas un codigocuenta, el Codigocuenta es el indice (sin duplicados) en mi tabla y es el que quiero verificar, antes de insertar, si existe para no crear un error de duplicados, trabajo con AdoQuery en access. Les agradezco de ante mano por la ayuda que me puedan prestar, buenas tardes

Caral 05-03-2008 21:09:38

Hola
Código Delphi [-]
 Adoquery1.sql.text:= 'Select Codigocuenta from TuTabla Where Codigocuenta =' +QuotedStr(Edit1.Text);
 If Edit1.Text = Adoquery1.Fields[0].Value then
   MessageDlg('El codigo ya Existe',mtError,[mbOK],0)
   else
  // lo que sea
Saludos

AzidRain 05-03-2008 23:35:11

Me parece que lo correcto es dejar que el motor mismo haga el trabajo de validar los datos. Si la tabla esta bien diseñada, Codigocuenta debe estar definido como índice único por lo que el motor mismo no permitirá duplicarlo.

Ahora bien, solo hay que capturar la posible excepción y trabajar en consecuencia:

Código Delphi [-]
  ADOQuery.SQL.Text := 'insert codigocuenta into mitabla';
  Try
    ADOQuery.ExecSQL;
 except
   //si ocurrió una excepción seguramente es por que ya existe el código.
  // aquí procesamos el error que en este caso solo sería mostrar un mensaje menos
  // críptico que el del motor
 end;

En este ejemplo obviamente hay que trabajar un poco lo que se captura con except porque como lo puse se captura cualquier excepción que genere el motor, tendríamos que hacer el manejador muy escífico para capturar solo las excepciones del tipo Key-violation. Sin embargo si lo pruebas así te debe funcionar bien además de que queda más legible.
Tienes que tener en cuenta el ámbito del try..except de manera que lo que pongas en el except efectivamente haga algo para manejar el problema, por ejemplo podría darle el foco al control que contenga la clave duplicada y mandar el mensaje al usuario.

Al González 06-03-2008 00:13:13

Dejar que el servidor decida me parece lo más adecuado. Finalmente el servidor de la base de datos es siempre el que tiene la última palabra.

Existe la opción de analizar el texto del mensaje de error para determinar que tipo de situación ocurrió al intentar guardar, aunque siempre será más seguro obtener un código de error numérico.

Azid, estoy en Córdoba. FGarcia y yo te andamos buscando, ¿'on tás cab'? :) Ya en serio, me gustaría conocerte si no andas muy ocupado.

Saludos.

Al González. :)

Caral 06-03-2008 01:37:38

Hola
Por supuesto, quien puede debatir con los maestros.:D
Siempre Me alegran vuestras intervenciones, así aprendo mas.:)
Saludos

keyboy 06-03-2008 01:48:28

Pero hay de casos a casos.

Si hay que ingresar registros grandes con medianas posibilidades de estar repetidos, quizá sea preferible averguar primero si el registro ya existe, que llenar campos y campos para finalmente recibir la notificación del servidor de que acabo de perder preciosos minutos de tiempo porque ya estaba ese registro en la tabla.

Bye

lucasarts_18 06-03-2008 03:34:53

Cita:

Empezado por keyboy (Mensaje 271063)
Pero hay de casos a casos.

Si hay que ingresar registros grandes con medianas posibilidades de estar repetidos, quizá sea preferible averguar primero si el registro ya existe, que llenar campos y campos para finalmente recibir la notificación del servidor de que acabo de perder preciosos minutos de tiempo porque ya estaba ese registro en la tabla.

Bye

Esto me suena cuando un control pierde el foco hacer tal validación, o cuando completas una serie de acciones, yo concuerdo contigo, todo depende del contexto, pero la mayoría de las veces validar contra el motor es lo más acertado.:rolleyes:

Hasta Luego .-

sidneyb 10-03-2008 15:26:50

Buen Dia foro, al mismo tiempo muchas gracias por su atencion, Logre hacerlo por medio de la instruccion dada por Azid, aunque estoy aun un poco desorientado de la manera de capturar el error de un Key-Violation, pero sera cuestion de dedicarme unos minutos, como les mencione al principio estoy muy fuera de practica y quisiera intentarlo unas veces primero. una vez mas muchas gracias por su atencion, tengan un buen dia


La franja horaria es GMT +2. Ahora son las 04:08:18.

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