TprxADOQueryDetail

De Pragma Wiki
Revisión del 15:22 16 may 2025 de Luciano Carou (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Introducción

El objeto TprxADOQueryDetail (Query para detalles de otros queries) se usa exlusivamente para agregar detalles de impresión a otros queries para ser usados en el generador de reportes ReportBuilder (documentado más adelante). Normalmente el generador de reportes usa los datos de cada pantalla para generar una impresión, pero si necesitáramos agregar detalles a esas impresiones (por ejemplo: imprimir artículos con sus empaques) la única manera de hacerlo es definiendo sentencias SQL en las tablas mencionadas más abajo. Este componente obtiene esa(s) sentencia(s) y crea instancias para manejar esos detalles adicionales.

Las sentencias se definen en:

Descripción

El objeto TprxADOQueryDetail (Query para detalles de otros queries, obsoleto.) define...

Identidad

  • Ancestro: TprxADOQuery
  • Carpeta: C:\DevelopPrx\library
  • Archivo: prxADOQueryDetail.pas

Declaración

type
  TprxADOQueryDetail = class(TprxADOQuery)
  private
    FMasterQuery: TprxADOQuery;
    Fapply_master_key_sql: TStringList;
  protected
    procedure   SetMasterQuery(aValue: TprxADOQuery);
    property    apply_master_key_sql: TStringList read Fapply_master_key_sql write Fapply_master_key_sql;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure   Loaded; override;

    procedure   ApplyMasterKey;

    property    MasterQuery: TprxADOQuery read FMasterQuery write SetMasterQuery;    
  published
  end;

function  prxADOQueryDetailsCreate(aQuery: TprxADOQuery): Integer;

prxADOQueryDetailsCreate(aQuery: TprxADOQuery): Integer

La función prxADOQueryDetailsCreate(aQuery: TprxADOQuery): Integer se declara fuera de la clase haciéndola pública a toda la aplicación, simplemente se ejecuta como Resultado := prxADOQueryDetailsCreate(unQuery); sin necesidad de instanciar la clase TprxADOQueryDetail.

Implementación

function prxADOQueryDetailsCreate(aQuery: TprxADOQuery): Integer

Dado un query, esta función crea todos los TprxADOQueryDetail que hagan falta según el SQL ejecutado. Notar que

function prxADOQueryDetailsCreate(aQuery: TprxADOQuery): Integer;
var
  vQ: TprxADOQuery;
  vCodigo: String;
  vDS: TprxADOQueryDetail;
  vsq: String;
begin
  // Carga la definición de los detalles de la base de datos...

  vQ      := prxADOQueryCreate(aQuery);
  vCodigo := '';
  Result  := 0;

  vsq := 'SELECT';
  vsq := vsq + ' prximpresion_definicion.Clase,';
  vsq := vsq + ' prximpresion_definicion.Codigo,';
  vsq := vsq + ' prximpresion_definicion_detalle.Linea,';
  vsq := vsq + ' prximpresion_definicion_detalle.Comando';
  vsq := vsq + ' FROM prximpresion_definicion, prximpresion_definicion_detalle WHERE';
  vsq := vsq + ' prximpresion_definicion.Clase = ' + Q(aQuery.ReportId);
  vsq := vsq + ' AND prximpresion_definicion_detalle.Clase = prximpresion_definicion.Clase';
  vsq := vsq + ' ORDER BY';
  vsq := vsq + ' prximpresion_definicion.Clase,';
  vsq := vsq + ' prximpresion_definicion.Codigo,';
  vsq := vsq + ' prximpresion_definicion_detalle.Linea';

  if vQ.Select(vsq) then
     begin
     vDS := nil;

     while vQ.EOF =False do
           begin
           if AnsiCompareText(vCodigo, vQ.FieldByName('Codigo').AsString) <> 0 then
              begin
              vCodigo := vQ.FieldByName('Codigo').AsString;
              Result  := Result + 1;

              vDS                      := TprxADOQueryDetail.Create(aQuery);
              vDS.ppAutoFindConnection := True;
              vDS.Name                 := vCodigo;
              vDS.MasterQuery          := aQuery;
              vDS.Loaded;
              end;

           if Assigned(vDS) then
              vDS.SQLX.Add(Trim(vQ.FieldByName('Comando').AsString));

           vQ.Next;
           end;
     end;

  vQ.Free;     
end;

Carga las definiciones de detalles de las tablas prximpresion_definicion y prximpresion_definicion_detalle e instancia componentes para cada detalle.

procedure SetMasterQuery(aValue: TprxADOQuery)

Setea la propiedad "MasterQuery" para una relación master - detail, al hacerlo se suscribe a los mensajes del master.

Notar la declaración de la propiedad MasterQuery:

  private
    FMasterQuery: TprxADOQuery;

Y su método de acceso:

  public
    property    MasterQuery: TprxADOQuery read FMasterQuery write SetMasterQuery;    

Este procedimiento se ejecuta normalmente en la asignación de la función prxADOQueryDetailsCreate:

vDS.MasterQuery := aQuery;

procedure ApplyMasterKey

Recibe mensaje del master cada vez que va a cambiar de registro para que los posibles detalles se ejecuten para cargar los datos correspondientes a ese master.

Uso

El único uso de este componente es para generar detalles de impresión asociados a una clase o consulta.