2010-10-31 30 views
8

He creado un informe usando FastReport Designer y llamándolo usando Delphi 6. Pero DataSet para el MasterData y los campos no están asignados en tiempo de diseño. Quiero establecer estas propiedades en tiempo de ejecución según el DataSet seleccionado. ¿Cómo puedo hacer eso? ¿Cómo puedo acceder al DataSet del MasterData en Delphi antes de llamar a la vista previa/impresión/diseño? Se agregó el siguiente código en frxReport1BeforePrint.¿Cómo se asigna el conjunto de datos dinámicamente en FastReport?

t := frxReport1.FindObject('MasterData1') as TfrxMasterData; 
    //if Assigned(t) then 
    //t.DataSet := frxIBODataset1; 

    m := frxReport1.FindObject('mTenderType') as TfrxMemoView; 
    if Assigned(m) then 
    begin 
    m.DataSet := frxIBODataset1; 
    m.DataField := 'ACCOUNTNAME'; 
    m.Text := '[frxIBODataset1."ACCOUNTNAME"]'; 
    end; 

Pero necesito establecer estas propiedades antes de llamar a la impresión/diseño/vista previa. Cualquier ayuda es apreciada.

Respuesta

2

Primero debe especificar si está tratando de usar un conjunto de datos definido en su aplicación, o un conjunto de datos definido directamente en su informe (pestaña Datos en el diseñador de FastReport).

Si está intentando usar un conjunto de datos definido dentro de su aplicación (por ejemplo, una instancia AdoDataset definida en uno de sus módulos de datos), para tal propósito, no tiene que vincular la MasterBand a su conjunto de datos . dinamicamente. Dentro del informe, su MasterBand está vinculada a una instancia TfrxDbDataset en tiempo de diseño. En tiempo de ejecución, su instancia frxDbDataset se puede conectar a cualquier conjunto de datos en su proyecto.

Aquí es cómo sería:

1- se le cae un componente frxReport y un componente frxDbDataset en su formulario o módulo de datos. 2- En el diseñador de informes, vaya a la sección Conjuntos de datos y agregue el archivo frxDbDataset disponible a la lista de conjuntos de datos del informe. 3- Agrega una banda de datos maestros y asigna el archivo frxDbDataset a su propiedad Dataset. 4- Ahora en su código, antes de mostrar o la preparación del informe, se puede escribir algo como esto:

if MyOption = 1 then 
    frxDbDataset1.Dataset := AdoDataset1 
    else 
    frxDbDataset1.Dataset := AdoDataset2; 

Lo que se asigna a frxDbDataset se imprimirán por el maestro de banda en su informe.

Si está definiendo el conjunto de datos directamente dentro del informe, utilizando el diseñador de FastReport; entonces todo está dentro de tu informe. Simplemente abra el diseñador de informes rápidos y haga esto:

1- Vaya a la pestaña Datos y defina sus conjuntos de datos (por ejemplo, AdoQuery1). 2- Seleccione el objeto Informe del panel Árbol de informes. 3- En el inspector de objetos, vaya a la pestaña Eventos. 4- Elige un evento apropiado; OnStartReport es un buen evento para su trabajo. Haga doble clic en él para abrir el editor de código. 5- Ahora puede asignar el conjunto de datos definido en la pestaña de datos a la banda de datos maestros utilizando el código PascalScript. Algo como esto:

procedure frxReport1OnStartReport(Sender: TfrxComponent); 
begin 
    MasterData1.Dataset := <ADOQuery1."ADOQuery1">;  
end; 
+0

Su solución no funciona utilizando FastReports4/delphi XE2 Veo que la banda se imprime muchas veces si configuro StartNewPage, pero no puedo ver ningún dato en ella. ¿Hay un paso adicional para definir campos para él (dinámicamente, sin tener en cuenta los tipos de datos)? – ertx

-1

Si está utilizando FastReport 3+ a continuación, puede colocar los componentes de base de datos inside informe. Solo lo que necesita es proporcionar conexión a la base de datos y ejecutar el diseñador desde su aplicación.

Puede definir variables, pasarlas de la aplicación y ejecutar su archivo de informe .fr3.

Cuestiones relacionadas