Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   dblookcombobox maestro detalle (https://www.clubdelphi.com/foros/showthread.php?t=69449)

gonza_619 19-08-2010 05:03:51

dblookcombobox maestro detalle
 
hola q tal, miren tengo un maestrdetalle e un form entonces utilizo un dblookupcombobox para filtrar los datos , osea al seleccionar un registro del maestro me muestra el detalle relacionado en un dbgrid. el dbgrid esta relacionado a tabla detalle.
bien lo que queiro es que al principio de la ejecucion en el grid me muestre toda la tabla detalle sin estar filtrada por la tabla maestro. pero cuando quiero buscar registros relacionados con la tabla mestro ejecuto el dblookupcombobox, bien ahora cuando hago click otra vez sobre el lookupcombobox para q se cierre (on close up) vuelva a mostrar la tabla detalle completa en el dbgrid sin estar filtrada.
el problema es que no se sobre q eventos del lookcombobox activar y desactivar la talba maestro . o como sugieren q se podria hacer ?
gracias a todos

ecfisa 19-08-2010 06:04:19

Hola.

Código Delphi [-]
{ Form.OnCreate }
procedure TForm.FormCreate(Sender: TObject);
begin
  tbDetalle.MasterSource:= nil;
end;

{ DBLookupComboBox.OnCloseUP }
procedure TForm.DBLookupComboBoxCloseUp(Sender: TObject);
begin
  tbDetalle.MasterSource:= nil;
end;

{ DBLookupComboBox.OnDropDown }
procedure TForm.DBLookupComboBoxDropDown(Sender: TObject);
begin
  tbDetalle.MasterSource:= dsMaestro;
end;

Saludos.

ecfisa 19-08-2010 07:11:20

Hola de nuevo.

Se me pasó por alto que quizá estés trabajando con TQuery.

En ese caso sería:
Código Delphi [-]
const
   MASTDET_OFF =  'SELECT * FROM DETALLE';
   MASTDET_ON =   'SELECT * FROM DETALLE WHERE "DETALLE"."MASTER_FIELD" = :"MASTER_FIELD"';

{ Form.OnCreate }
procedure TForm.FormCreate(Sender: TObject);
begin
  with QryMaestro do
  begin
    SQL.Text:= 'SELECT * FROM MAESTRO';
    Open;
    SQL.Text:= MASTDET_OFF;
    Open;
  end;
end;

{ DBLookupComboBox.OnCloseUP }
procedure TForm.DBLookupComboBoxCloseUp(Sender: TObject);
begin
  with QryDetalle do
  begin
    SQL.Text:= MASTDET_OFF;
    Open;
  end;
end;

{ DBLookupComboBox.OnDropDown }
procedure TForm.DBLookupComboBoxDropDown(Sender: TObject);
begin
  with QryDetalle do
  begin
    SQL.Text:= MASTDET_ON;
    Open;
  end;
end;

Nota:
.- Relacioná la propiedad: QryDetalle.DataSource con el TDataSource asociado al QryMaestro. (QryDetalle.DataSource -> dsMaestro)
.- MASTER_FIELD sería el nombre del campo por el que estableces la relación.

Saludos.

gonza_619 21-08-2010 06:27:05

dblookupcombobox mastersetail
 
ok, muchas gracias nuevamente probare la qer opcion ya que no estoy trabajando tquery, no entiendo porque oncreate, para que utilizaria ese procedimiento?. gracias

ecfisa 21-08-2010 06:54:26

Cita:

Empezado por gonza_619 (Mensaje 374106)
ok, muchas gracias nuevamente probare la qer opcion ya que no estoy trabajando tquery, no entiendo porque oncreate, para que utilizaria ese procedimiento?. gracias

En el caso del TTable, lo puse por que vos querés que el DBGrid aparezca sin "filtrar".
Por lo tanto en la creación del from asigno bDetalle.MasterSource:= nil, de ese modo se quita la relación de dependencia
con la Tabla Maestro y ves todo los registros de tbDetalle. (por si lo hubieses asignado en tiempo de diseño)

En el caso del TQuery... es igual sólo que difiere la sintáxis, pero no te compliques si todavia no trabajas con Querys.

Nota: Usé la palabra "filtrar" como convención, pero que no se confunda con la propiedad Filter de TTable, no tiene
nada que ver en este caso.


Saludos.


La franja horaria es GMT +2. Ahora son las 16:38:39.

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