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 07-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Tablas Maestro-Detalle

Como se hace para eliminar un registro en una Tabla Maestro-Detalle, ya que cuando elimino, uno en la tabla Maestro me sigue dejando los que estaban relaciondos con éste en la tabla Detalle, y por su puesto lo que quiero es que me elimine, tanto el registro de la tabla Maestro como los que estan relacionados con éste en la Detalle.
Yo escribi el siguiente código para hacerlo pero no funciona:
Código:
procedure TForm3.eliminarClick(Sender: TObject);  //ELIMINAR Registros, si tabla
var
 n,m:Variant;
begin
 n:=Modulodatos.TblConsumos.FieldValues['IDCONSUMO'];
 ModuloDatos.TblConsumos.Delete;
 ModuloDatos.TblDetproducto.Active:=True;
 ModuloDatos.TblDetproducto.First;
 While Not ModuloDatos.TblDetproducto.Eof Do
  begin
    m:=ModuloDatos.TblDetproducto.FieldValues['CONSUMO'];
    If n=m Then
      ModuloDatos.TblDetproducto.Locate('IDCONSUMO',m,[]);
      ModuloDatos.TblDetproducto.Delete;
    end;
   Next;
 If Modulodatos.TblConsumos.IsEmpty Then
  begin
   Modificar.Enabled:=False;                   //es vacía desactiva botones.-
   Eliminar.Enabled:=False;
  end;
end;
Gracias.

Silvio.-
Responder Con Cita
  #2  
Antiguo 07-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Hola silviodp

Si usas un motro de base de datos relacional te aconsejo usar Claves foráneas con borrado en cascada

sería algo así:

Código SQL [-]
 alter table MiTabla
 add constraint MiConstraint
 foreign key (campos)
 references TablaReferencia (campos)
 on delete cascade on update cascade

Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #3  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

Suponiendo que no puedas (ya sea porqué tu BD no lo permite o pq simplemente no tienes permisos para hacerlo) establecer algún tipo de regla de integridad a nivel de base de datos como te comenta cbrrr, lo que se suele hacer es programar un código para borrar los registros del detalle en el evento BeforeDelete del maestro. De este modo, con solo eliminar el registro del maestro ya se eliminan automáticamente los registros del detalle.

Un saludo.
Responder Con Cita
  #4  
Antiguo 07-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Tablas Maestro-Detalle

Si yo utilizo el codigo que escribi antes en el evento BeforeDelete de la tabla Maestra, Uds. creen que puede hacer lo que quiero?, o el codigo no esta bien??
Gracias, saludos.

Silvio.-
Responder Con Cita
  #5  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
En el BeforePost solo tendrías que hacer

Código Delphi [-]
while not Detalle.Eof do
  Detalle.Delete

Saludos!
Responder Con Cita
  #6  
Antiguo 07-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por marcsc
En el BeforePost solo tendrías que hacer
Supongo, Marc, que has querido decir en el BeforeDelete...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Ups!! Por supuesto!!

En qué estaría yo pensando

Gracias por la corrección!
Responder Con Cita
  #8  
Antiguo 07-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Tablas Maestro-Detalle

En el BeforePost?, no entiendo...
Responder Con Cita
  #9  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por silviodp
En el BeforePost?, no entiendo...
No no, lo siento, fue un despiste, el código que te he puesto sería para el BeforeDelete

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


La franja horaria es GMT +2. Ahora son las 19:11:29.


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