Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Insertar registro en una tabla

Hola a todos, muchos saludos. Tengo el siguiente problema, trabajo en delphi 7 con una aplicación de bases de datos utilizando Microsoft SQL Server, tengo un formulario donde trato de insertar un nuevo registro en una tabla, utilizando los componentes de la paleta ADO. Tengo un ado connection, ado table y un datasource, además de diferentes dbedit que están enlazados a los campos de la tabla a la cual quiero agregar el nuevo registro. Tengo tres botones de comando, uno para agregar con el siguiente código:
Código Delphi [-]
begin
 ADOTNuevaFactura.Append;
 ADOTNuevaFacturaIdFactura.FocusControl;
end;

Un botón cancelar con el código siguiente:
Código Delphi [-]
begin
 ADOTNuevaFactura.Cancel;
end;
Y por último un botón guardar con el código:
Código Delphi [-]
begin
 ADOTNuevaFactura.Post;
 if ADOTNuevaFactura.Locate('IdFactura',DBEDitNumero.Text,[])then
    MessageDlg('Esta factura ya existe',mtError,[mbOK],0);
    Abort;
end;
El campo Idfactura es el campo llave de la tabla, por lo que he puesto esto para que alerte en caso de que la factura que se trata de introducir ya exista, pero esto no me funciona cuando pruebo la aplicación y pongo una factura ya existente y le doy al botón guardar se me levanta una exception en la clase EoleException advirtiéndome que hay una violation de la clave primaría, esto lo se por eso he puesto ese código para que no se levante la exception, pero no se cmo solucionarlo, y no quiero entrar en el mundo del tratamiento de las excepciones porque realmante es algo que lamentablemente no entiendo. Ojala me puedan ayudar. Muchas gracias por todo.
Responder Con Cita
  #2  
Antiguo 10-11-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Desde el momento que haces el Post, ya no te sirve para nada la búsqueda puesto que ya se ha producido la excepción.

Lo mejor es que una vez que salgas del campo llave "OnExit", lances un SQL averiguando si te devuelve algún registro igual que el que pretendes grabar, si es así tu mismo
Código Delphi [-]
ShowMessage('Ese registros ya existe')
, en caso contrario es cuando haces el Post.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 10-11-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Gracias marcoszorilla por tu consejo, pero como he dicho en otras ocasiones me falta mucho por caminar en delphi, probé lo que me dijiste pero quitando el código donde está el método locate y colocándolo en el evento onexit del dbedit donde capturo el número de la factura, y nada me lanza otra excepción diciéndome que el campo donde capturo la descrpición de la factura no puede contener un valor nulo, esto ocurre nada mas salir de ese primer edir cuando se desencadena el evento onexit. Si no te s molestia podrias mostarme con un ejemplo lo que me explicaste, disculpa tanta molestia. Gracias.
Responder Con Cita
  #4  
Antiguo 10-11-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
begin
 ADOTNuevaFactura.Post;//esto es lo que te da el error.
 if ADOTNuevaFactura.Locate('IdFactura',DBEDitNumero.Text,[])then
    MessageDlg('Esta factura ya existe',mtError,[mbOK],0);
    Abort;
end;

Anula el método Post y colócalo dentro de un if en el que se evalue si la consulta SQl devolvio o no registros.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 10-11-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
mascoszorrilla, disculpame a lo mejo te tengo obstinado con esto, pero no acabo de encontrar la solución, he probado y nada me sigue saliendo el mismo error, incluso eliminé el método post en el evento click del botón guardar y da lo mismo, no se que hacer, estoy buscando por donde quiera la solución, he consultado la yuda del delphi y nada.
Responder Con Cita
  #6  
Antiguo 10-11-2006
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
en el momento en que haces el post se actualiza el registro y casca si se repite el dódigo.
Cuando haces el locate, dado que el registro activo cambia, hace post automático y te casca.
Prepara una query diferente que haga una select mirando el código de ese registro. Si los registros devueltos son más de 0 , obviamente, está repetido. Pon ese codigo en el evento beforePost de la tabla, y a correr.



Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12
Insertar un registro en una tabla Paradox maravert Tablas planas 1 14-10-2005 02:08:02
Comparar un registro de un edit con un registro de una tabla en una consulta Damian666 SQL 10 01-10-2005 00:43:20
Insertar registro en tabla jzk Conexión con bases de datos 15 26-05-2004 18:58:19
Borrar e Insertar un registro de una tabla con Query Draco Conexión con bases de datos 4 06-05-2004 17:27:37


La franja horaria es GMT +2. Ahora son las 15:20:46.


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