Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2008
sidneyb sidneyb is offline
Miembro
 
Registrado: nov 2007
Posts: 53
Poder: 17
sidneyb Va por buen camino
Exclamation 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
Responder Con Cita
  #2  
Antiguo 05-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 05-03-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 06-03-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
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
Smile

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.
Responder Con Cita
  #5  
Antiguo 06-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por supuesto, quien puede debatir con los maestros.
Siempre Me alegran vuestras intervenciones, así aprendo mas.
Saludos
Responder Con Cita
  #6  
Antiguo 06-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 06-03-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
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.

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #8  
Antiguo 10-03-2008
sidneyb sidneyb is offline
Miembro
 
Registrado: nov 2007
Posts: 53
Poder: 17
sidneyb Va por buen camino
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
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
Validar registro antes de insertar Moparova SQL 10 30-10-2008 16:11:42
verificar la existencia de una base de datos gushmaish Conexión con bases de datos 3 20-02-2007 15:08:16
existencia de archivo ddd_ddd Varios 1 06-11-2005 15:54:00
Actualizar existencia de productos e insertar nuevos si no se encuentran ctronx MySQL 5 19-10-2004 16:27:03
Existencia de ficheros emeritos Varios 1 23-01-2004 14:26:54


La franja horaria es GMT +2. Ahora son las 14:39:00.


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