Ver Mensaje Individual
  #2  
Antiguo 22-02-2020
hagsoft hagsoft is offline
Miembro
 
Registrado: jul 2013
Posts: 11
Reputación: 0
hagsoft Va por buen camino
Me respondo yo mismo esta es la forma con lo que consegui si alguno le sirve. saludos.



Código Delphi [-]
procedure TfrmSellGrid.facturasMasterDetail;
var
  providerMaster:TDataSetProvider;
  cdsMaster,cdsDetail:TClientDataSet;
  dsRelacion,dsourceMaster,dSourceDetail:TDataSource;
  SQLQuery1, SQLQuery2:TUniQuery;

  dsfKey:TDataSetField;
begin
  providerMaster:=TDataSetProvider.Create(nil);
  cdsMaster:=TClientDataSet.Create(nil);
  cdsDetail:=TClientDataSet.Create(nil);
  dsRelacion:=TDataSource.Create(nil);
  dsourceMaster:=TDataSource.Create(nil);
  dSourceDetail:=TDataSource.Create(nil);
//  try

     SQLQuery1:=TUniQuery.Create(Self);
     SQLQuery2:=TUniQuery.Create(Self);
     SQLQuery2.Name:='SQLQuery2'; //Importante definir este campo en el query para lograr la relacion maestro detalle debe llevar el mismo nombre en el datasetfield.

     dsRelacion.DataSet:=SQLQuery1;
     SQLQuery2.MasterSource:=dsRelacion;

    with SQLQuery1 do
    begin
      Connection:=dm.dbaseConn;
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM facturas ');
      Open;
    end;
    with SQLQuery2 do
    begin
      Connection:=dm.dbaseConn;
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM facturas_detalles');
      SQL.Add('WHERE idFactura = :idFactura');
      //autoEdit:=True;
      //MasterSource:=dsRelacion;
      Open;
    end;

    //SQLQuery2.DataSource:=dsRelacion;
    //providerMaster.DataSet:=SQLQuery1;
    //cdsMaster.ProviderName:=providerMaster.Name;

    providerMaster.DataSet:=SQLQuery1;
    cdsMaster.SetProvider(providerMaster);

    with TIntegerField.Create(Self) do
    begin
      Name := 'idFactura';
      FieldKind := fkData;
      FieldName := 'idFactura';
      DataSet := cdsMaster;
      Required := True;
    end; //ID
     with TDateField.Create(Self) do
    begin
      Name := 'fecha';
      FieldKind := fkData;
      FieldName := 'fecha';
      DataSet := cdsMaster;
      Required := True;
    end; // campos......
    with TDataSetField.Create(Self) do
    begin
      Name := 'cdsMasterSQLQuery2';
      FieldKind:=fkData;
      FieldName := 'SQLQuery2'; //debe llevar el mismo nombre del query detalle.
      DataSet := cdsMaster;
    end;

    
    cdsDetail.DataSetField:=TDataSetField(FindComponent('cdsMasterSQLQuery2'));

    cdsMaster.Open;
  
    cdsDetail.Open;
    dsourceMaster.DataSet:=cdsMaster;
    dSourceDetail.DataSet:=cdsDetail;



    salesGrid.DataSource:=dsourceMaster;
    invDetails.DataSource:=dSourceDetail;


end;
Responder Con Cita