Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas Con ADOquery y Tablas Relacioanadas (https://www.clubdelphi.com/foros/showthread.php?t=10061)

KaTo 10-05-2004 03:38:15

Problemas Con ADOquery y Tablas Relacioanadas
 
Hola Amigos :) tengo el siguiente problema
Mi BD es esta formada por 2 tablas relacionadas .
AREA.
- depto
- rut_area
- observaciones
PERSONAL
- rut_personal
- nombre
- direccion
- fono

utilizo los siguientes controles
adoconnection ---> mi coneccion a la BD
adoquery1--> sql---> Select * from personal

Mi codigo es asi
if key=#13 then // presiono enter y busca rut(es un codigo)
begin
adoquery1.Close ;
with adoquery1 do begin
with sql do begin
clear;
add('Select * from personal where rut_personal='''+edit1.Text+'''');
open;
end;
end;
adoquery1.first;
if adoquery1.Eof then
begin
showmessage ('datos no encontrados');
end
else
begin
edit2.Text :=adoquery1.FieldValues ['nombre']; // los despliego por pantalla
edit3.Text :=adoquery1.FieldValues ['direccion'];
edit4.Text :=adoquery1.FieldValues ['fono'];

end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject); // boton de eliminacion
begin
try
adoquery1.SQL.Clear ;
adoquery1.sql.Add('delete from personal where rut_personal='''+edit1.Text+'''');
adoquery1.ExecSQL ;
showmessage ('datos eliminados');
except
adoquery1.Cancel ;
raise;
end;
end;

AHORA CUANDO PRESIONO EL BOTON DE ELIMINACION DE REGISTRO ME DESPLIEGA EL SIGUIENTE ERROR:
"EL REGISTRO NO SE PUEDE ELIMINAR O CAMBIAR PORQUE LA TABLA 'AREA' INCLUYE REGISTROS RELACIONADOS"
ALGUIEN ME PODRIA DAR UNA MANO COMO PODER MOSTRAR ALGUN CUADRO DE MENSAJE DANDOLE EL AVISO DE
QUE EL REGISTRO ESTA SIENDO UTILIZADO Y QUE NO SE PUEDE ELIMINAR O COM PODER INTERSEPTAR EL ERROR

YA QUE PROBE CON TRY EXCEPT PERO NO SE COMO PRODRIA SER LA SOLUCION.
LES AGRADECERIA UN EJEMPLO GRACIAS

LES SALUDA KaTo :p

marcoszorrilla 10-05-2004 07:35:49

Si lo que quieres es que al borrar un registro maestro se eliminen todos los relacionados automáticamente, tienes que añadir desde Access a parte de la integridad referencial, tienes la posibilidad de marcar dos opciones Actualización en cascada y Eliminación en cascada, esta última te resolverá el problema.

Un Saludo.

KaTo 10-05-2004 17:25:41

Cita:

Empezado por marcoszorrilla
Si lo que quieres es que al borrar un registro maestro se eliminen todos los relacionados automáticamente, tienes que añadir desde Access a parte de la integridad referencial, tienes la posibilidad de marcar dos opciones Actualización en cascada y Eliminación en cascada, esta última te resolverá el problema.

Un Saludo.

Hola MarcosZorrilla, gracias por tu ayuda, pero como es lo de eliminacion en cascada soy novato en esto de delphi , estuve probando con VB pero no tuve problemas con esto. Mira la idea es poder desplegar un mensaje por pantalla que al presionar el boton de Eliminar arroje el Mensaje de que el dato se encuentra utilizado entonces no se podra eliminar , ya que esta relacionado. No se si me explique bien. bueno gracias
Me podrias enviar algun ejemplo a traves de codigo porfa


Un Saludo. :)

marcoszorrilla 11-05-2004 15:03:31

Algo como esto, adáptalo:

Código Delphi [-]
procedure TfrConAlbaran.SpEliminaClick(Sender: TObject);
begin
        if Application.MessageBox('¿Seguro que desea elimiar el albarán
 seleccionado?','Atención, revise las fechas.',mb_OkCancel +
        mb_IconQuestion)= idOk then
        begin
        askbor:=False;

        with DmDatos.LinAlba do
        begin
                DmDatos.LinAlba.First;

                while not DmDatos.LinAlba.Eof do
                begin
                DmDatos.Linalba.Delete;
                end;
        end;
        DmDatos.Alba.Delete;
        askbor:=True;
        end;
end;

Un Saludo.

KaTo 12-05-2004 21:47:17

Gracias MarcosZorilla me sirvio de harto.
Una ayuda mas, quisiera saber que me conviene mas trabajar con post con consultas tipo Insert into ....., o con Locate o Select * from ...., dbedit1.text o Edit1.text ¿ que es mas rapido ? o mejor para trabajar con SQL Server, ya que he realizado un ABM (ALtas, Bajas, Modicaciones) , pero con puras consultas Select * from Where --> es mas rapido asi o es mas lento. ya que cuando ubico un registro con locate a diferencia de SElect es mas rapido con Locate, sera a lo mejor por que es campo indice.
Te agradeceria tu ayuda, gracias Master


- Hice algo asi:
if adoquery1.locate ('mi_campo',edit1.text,[]) then
showmessage ('dato encontrado')
else
begin
adoquery1.append;
adoquery1.fieldbyname('mi_campo').asstring:=edit1.text;
try
adoquery1.post;
except
adoquery1.cancel;
raise;
end;
end;

porque me da error este codigo. :confused:
Adoquery1 --- > string -->Select * from Tabla



Saludos y gracias :)


La franja horaria es GMT +2. Ahora son las 15:41:14.

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