Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-08-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
master source has detail records

hola, miren he tenido un problema con este mensaje, al parecer es porque en otro form tengo una tabla en la que relaciono la tabla que necesesito borrar un registro.
bueno tengo un form1 en la cual tengo 2 tables. una llamada CURSO y otra RUBRO , la tabla CURSO es el detalle y Rubro el maestro. bien ahora al seleccionar un Rubro me aparece todos los cursos de ese rubro, ahora cuando quiero borrar un curso de ese rubro me aparece "master has detail records", entonces me fije en el Form2 en el cual tengo una tabla planes de pago en el cual tengo relacionado Curso, lo cual parece ser el problema del mensaje, entonces hice los sig. en un boton eliminar del form1 cuando selecciono un curso:
Código Delphi [-]
If Application.MessageBox ('¿Estas seguro que deseas eliminar el registro actual?',
'Eliminar registro',mb_YesNo+MB_IconStop) = ID_yes Then

if form2.table2.fieldbyname('curso').asinteger=Table1.fieldbyname('cod_curso').asinteger
then
application.Terminate;

bien lo hice como prueba para ver si funcionaba pero no ocurre nada , no cierra la aplicacion
Aclaro que en el form 2, la tabla que relaciono curso (planes), tiene el campo CURSO como clave foranea. como sugieren que deberia hacer o modificar el codigo ? gracias

bueno tambien se me ocurrio :
If Application.MessageBox ('¿Estas seguro que deseas eliminar el registro actual?',
'Eliminar registro',mb_YesNo+MB_IconStop) = ID_yes Then

while not form3.Table3.EoF do
begin
if form3.Table3.FieldByName('curso').AsInteger=table1.FieldByName('cod_curso').AsInteger
then application.Terminate;
end;

pero al parecer no recorre la tabla del form3

Última edición por gonza_619 fecha: 16-08-2010 a las 23:52:57. Razón: otra opcion
Responder Con Cita
  #2  
Antiguo 17-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gonza.

Supongamos que las tablas se llaman: Curso, Rubro y Planes.

Una posible solución sería usar el evento BeforeDelete de Curso para verificar si el registro tiene dependencias,
de ser así, avisar y abortar la operación:

Código Delphi [-]
procedure TForm1.CursoBeforeDelete(DataSet: TDataSet);
begin
  if not Planes.IsEmpty then
  begin
    ShowMessage('No se puede borrar, tiene registros dependientes'); // El mensaje que quieras.
    Abort;
  end;
end;

Saludos.

Última edición por ecfisa fecha: 17-08-2010 a las 01:28:46.
Responder Con Cita
  #3  
Antiguo 17-08-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
master has detail records

bien, donde tendria que colocar el codigo? en un boton?,
el problema es que quiero borrar los datos relacionados en la otra tabla del form2.
Responder Con Cita
  #4  
Antiguo 17-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No gonza.

Podés asignarlo:

.- Desde el Object Inspector:
Estando seleccionada la tabla Curso -> Click en pestaña Events -> Doble Click en el evento BeforeDelete.
Te va a armar la estructura del procedimiento.
Algo así:
Código Delphi [-]
procedure TForm1.CursoBeforeDelete(DataSet: TDataSet);
begin
  // ACA VA EL CÓDIGO
end;

.- O escribiendo el código. Asignás el procedimiento CursoBeforePost en el evento OnCreate del form por ejemplo.

Algo así:
Código Delphi [-]
procedure TForm1.CursoBeforeDelete(DataSet: TDataSet);
begin
  // ACA VA EL CÓDIGO
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    Curso.Open;
    Curso.BeforeDelete:= CursoBeforeDelete;
    ...
end;

Lógicamente te vá a resultar más fácil del primer modo.

Saludos.

Última edición por ecfisa fecha: 17-08-2010 a las 04:54:59.
Responder Con Cita
  #5  
Antiguo 17-08-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
master has detail records

hola gracias, disculpa que no sepa mucho del tema pero estaria bien si lo coloco asi:

Código Delphi [-]
procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
begin
if not form3.Table3.IsEmpty then
  begin
    ShowMessage('No se puede borrar, tiene registros dependientes');
    Abort;
  end;

ya que la tabla planes esta en el form2 y curso en form1, y como probaria el evento? con un boton table1.delete? muchas graicas
Responder Con Cita
  #6  
Antiguo 17-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
No tenés nada por que disculparte

Si tenés la tabla declarada en form3, es correcto.

Pero el código que te puse, sólo evita el borrado si tiene datos en relación de dependencia...
Y ahora mirando bién tu post anterior, ví que queres eliminar los datos dependientes.
caro y marcoszorrilla ya explicaron dos modos de hacerlo Acá .

Podés utilizar el código propuesto por ellos asignándolo a un TButton por ejemplo.

Cualquier duda no dejes de consultar

Saludos.

Última edición por ecfisa fecha: 17-08-2010 a las 05:31:10.
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
Dá error "Master has detail records" cuando no debería darlo! JuanBCT Tablas planas 3 06-08-2005 03:48:37
DBLookupComboBoxs Master/Detail o Detail/Master yusnerqui OOP 5 29-07-2005 18:40:20
master/detail, imprimiendo master en cada hoja acalderonr Impresión 4 29-11-2003 14:46:07
interbase:¿como crear un master-detail-detail? ElSanto24 Firebird e Interbase 2 22-10-2003 10:24:45
Master/Detail/Detail/Detail/etc... hgiacobone Tablas planas 2 24-07-2003 17:20:31


La franja horaria es GMT +2. Ahora son las 02:12:04.


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