PDA

Ver la Versión Completa : Asignar en tiempo de diseño un datafield dentro de un informe


melanthea
22-06-2004, 13:44:53
Si. soy yo de nuevo... Lo siento si estoy poniendo demasiados mensajes, espero que no suponga ningún problema... Si me estoy pasando, hacedmelo saber de acuerdo?

Hola:
Alguien me podría decir la manera de asociar un datafield en tiempo de diseño a un QRDBText en un Quick Report?
El caso es que tengo un componente IBQuery en un DataModule, y mediante código, añado un determinado texto SQL. A la hora de hacer un informe, no tengo ningún problema a la hora de asignarle el DataSet, pero el DataField no lo puedo asignar puesto que, evidentemente, la consulta estará vacía hasta que en tiempo de ejecución no se complete el código SQL.
Pensé hacer en el evento OnActivate del informe lo siguiente:

QRDBText2->DataField=ModuloDatos->IBQuery1->FieldValues["NOMBRE"];
QRDBText3->DataField=ModuloDatos->IBQuery1->FieldValues["APELLIDO"];
QRDBText4->DataField=ModuloDatos->IBQuery1->FieldValues["APELLIDO2"];


pero haciendo esto el informe me sale en blanco.
Alguien me podría echar un mano?
Gracias

delphi.com.ar
22-06-2004, 16:17:30
Tendrías que asignar el DataSet a enlazar y luego el nombre del campo (DataField)... ¡¡No los valores de los campos!!.. si quieres asignar "a mano" los valores de los campos, te recomendaría utilizar un TQRLabel.

Saludos!

melanthea
22-06-2004, 18:19:23
De acuerdo, pero cómo asigno los campos? Lo del DataSet ya lo tenía hecho, y es verdad que estaba asignando los valores ...

Pero bueno, es que no sé como asignarle los campos de la consulta, concretamente qué instrucción tendría que poner?

Saludos

delphi.com.ar
22-06-2004, 19:00:50
QRDBText2->DataField="NOMBRE";
QRDBText2->DataSet=ModuloDatos->IBQuery1;

melanthea
23-06-2004, 22:04:34
Hola
He probado el código que me comentas y me funciona, pero sólo a la hora de imprimir el informe. Supongo que haciendo un Preview, también tendrá que funcionar, pero el caso es que no soy capaz a ver una vista previa del informe :mad:
Añadí el código necesario para asignar los datafields en tiempo de ejecución (tal y como me comentas en el mensaje anterior), en los eventos BeforePrint y OnPreview. Además, desde un formulario invoco a las funciones preview y print cuando se pulsan los botones "Vista Previa" e "Imprimir", con el siguiente código

NombreFormularioInforme->NombreInforme->Preview();
//y en otro botón
NombreFormularioInforme->NombreInforme->Print();


Como comentaba, el informe lo imprime correctamente, pero parece que la funciónn Preview no me hace nada, únicamente me desplaza la scrollbar de un dbgrid donde estoy mostrando los datos de la consulta que luego pasaré a informe (y no tengo ni idea de por qué hace una cosa tan rara, yo únicamente invoco al método Preview...).

Muchas gracias por vuestra atención, y por dedicar tiempo a los novatos como yo.
Un saludo.

melanthea
24-06-2004, 16:06:48
Hola
Por favor nnecesito que alguien me eche una mano con esto. Sigo sin poder hacer un preview del informe, y ya estoy desesperada porque no encuentro el error y de que esto funcione supone que apruebe la ultima asignatura de la carrera, es muy importante para mí y espero que me puedan ayudar aunque solo sea decirme dónde puede estar el error.
He descubierto que el problema no está en la invocación a preview, porque la manera en que estoy invocanndo funciona.
El problema creo que esta en la asignacion dinamica de dataset y datafield en el evento onPrreview dl informe, puesto que en el beforePrint funciona correctamente.
Por favor, necesito la ayuda de alguien estoy muy perdida y ya no sé que mas vueltas darle a esto porque no debe de ser tan complicado, sera que yo soy una inútil

delphi.com.ar
24-06-2004, 16:16:44
Podrías sobreescribir el contructor del TQuickReport y hacer todas las asignaciones ahí.

Saludos!

barman
25-06-2004, 18:35:35
Prueba con PreviewModal();

NombreFormularioInforme->NombreInforme->Preview();
NombreFormularioInforme->NombreInforme->PreviewModal();