TprxADOQueryDetail

De Pragma Wiki
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 una sentencia SQL en la tabla prximpresion_definicion (y su detalle prximpresion_definicion_detalle). Este componente obtiene esa(s) sentencia(s) y crea instancias de este componente 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...

  // CACA

  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;