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 20-02-2008
pabloparra pabloparra is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
pabloparra Va por buen camino
Unhappy Disablecontrols en una relación master detail

Hola a Todos

Necesito urgente que alguien me ayude a solucionar el siguiente problema:

Tengo una tabla maestra en un componente TQuery y una Tabla Detalle en otro componente TQuery, las tablas están relacionadas con una llave de tipo entero ('MAE_CONS') y las consultas SQL de cada Query son las siguientes:

-Consulta Maestro: SELECT * FROM TABLAMAESTRA

-Consulta Detalle: SELECT * FROM TABLADETALLE
WHERE MAE_CONS=:MAE_CONS
en el datasource del Querydetalle coloco el datasource del maestro y
defino el parámetro como entero

Hasta aquí todo bien, el sistema funciona bien, pero necesito generar un reporte en el cual tengo que recorrer la tabla maestra y el detalle para cargar los valores, lo cual lo hago de la sgt forma:

Código Delphi [-]
Querymaestro.Disablecontrols;
Querydetalle.Disablecontrols;
try
  Querymaestro.First;
  while not Querymaestro.Eof do
  begin
     MAE_CONS:=QuerymaestroMAE_CONS.Value;
     if Querydetalle.Active then
        Querydetalle.Close;
     Querydetalle.DataSource:=nil;
     Querydetalle.ParamByName('MAE_CONS').Value:=MAE_CONS;
     Querydetalle.Open;
     Querydetalle.First;
     while not Querydetalle.eof do
     begin
          //Codigo
            Querydetalle.next
     end;
     Querymaestro.Next;
  end;
finally
Querymaestro.Close;
Querydetalle.Close;
Querydetalle.DataSource:=Datasoursemaestro;
Querymaestro.Open;
Querydetalle.Open;
Querymaestro.Enablecontrols;
Querydetalle.Enablecontrols;
end;

al ejecutar el código anterior el Querydetalle no sigue pegado del maestro,
se queda estático, es decir, se pierde el enlace automático. La verdad he intentado varias cosas pero no consigo solucionar el problema.

Por la atención prestada mis más sinceros agradecimientos.

Última edición por jachguate fecha: 20-02-2008 a las 22:17:17. Razón: ¡usad la etiqueta delphi para publicar código!
Responder Con Cita
  #2  
Antiguo 20-02-2008
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Hola

Te cuento lo que yo hago normalmente en este tipo de relaciones y de pronto te sirve:

1) En el evento AferScroll del maestro pongo
Código Delphi [-]
QueryDetalle.close;
QueryDetalle.ParamByName('MAE_CONS').asinteger:=MAE_CONS;
QueryDetalle.Open;

2) En el evento BeforeClose también del maestro
Código Delphi [-]
QueryDetalle.Close;

3) Y para recorrer todos los registros
Código Delphi [-]
try
  QueryMaestro.First;
  While not(QueryMaestro.eof) do
  begin
    QueryDetalle.First;
    While not(QueryDetalle.eof) do
    begin
      // codigo
      QueryDetalle.next;
    end;
    QueryMaestro.next;
  end;
finally
  QueryMaestro.Close;
end;

Yo nunca utilizo los DataSource por eso no comento tu código.

Saludos y espero te sirva.
Responder Con Cita
  #3  
Antiguo 20-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola. He editado tu mensaje para añadir la etiqueta delphi. Úsala para publicar trozos de código.

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
  #4  
Antiguo 21-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Para eso está implementado el BlockReadSize, la relación Maestro-Detalle sigue funcionando.

tabla.BlockReadSize := 32;
// operaciones

tabla.BlockReadSize := 0;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 21-02-2008
pabloparra pabloparra is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
pabloparra Va por buen camino
Smile Solucion disablecontrols en master detail

Hola compañeros, muchas gracias por sus sugerencias, pero he encontrado una solución más práctica que aumenta considerablemente el rendimiento de la aplicación:
Utilizo un nuevo datasourse (dtsauxiliar) y el datasourse maestro al que están pegados todos los componentes visuales los desactivo temporalmente mientras se termina el bucle.


Código Delphi [-]
dtsauxiliar.Dataset:=Querymaestro;
querydetalle.Datasourse:=dtsauxiliar;
Datasoursemaestro.Enable := False;
 
querydetalle.DisableControls;
try    
querymaestro.First;    
while not querymaestro.EOF do  
   begin    
    //-----------
   querydetalle.First;
   while not querydetalle.EOF do    
   begin   
   //-----------
   querydetalle.Next;
   end;
end;
querymaestro.Next;
end;
finally
 dtsauxiliar.Dataset:=nil;
dtsauxiliar.Enable := False;
querydetalle.Datasourse:=Datasoursemaestro;
querydetalle.EnableControls;
Datasoursemaestro.Enable := True; 
end;

Espero que les sirva, hasta la próxima.

Última edición por pabloparra fecha: 21-02-2008 a las 15:59:27.
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
Ayuda con relacion master detail key violation en el grid hawerd gutierre Tablas planas 3 25-07-2007 16:43:44
Relacion Master/Detail usando TIBDataSets Caco Mana Varios 0 15-05-2006 03:11:23
Ordenar relacion Master/Detail por otro campo!! arieliten Impresión 3 24-06-2005 14:54:21
Relacion Master Detail simon Conexión con bases de datos 0 24-06-2004 17:32:09
Relacion Master Detail simon OOP 9 21-06-2004 16:03:37


La franja horaria es GMT +2. Ahora son las 16:31:54.


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