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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-05-2004
KaTo KaTo is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
KaTo Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 10-05-2004
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
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.
__________________
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-05-2004
KaTo KaTo is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
KaTo Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 11-05-2004
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
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.
__________________
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 12-05-2004
KaTo KaTo is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
KaTo Va por buen camino
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.
Adoquery1 --- > string -->Select * from Tabla



Saludos y gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 04:59:27.


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