TprxADOQueryDetail
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:
- Impresión de clases y consultas, definición define la cabecera de detalles de impresión de una consulta.
- Impresión de clases y consultas, comandos define los comandos de cada impresión.
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;