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;
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.