PDA

Ver la Versión Completa : Qreport, soy novata!!!


Elizabethdelphi
31-05-2010, 00:17:54
Hola!! tengo que entregar un sistema para rendir el final de la ultima materia de la carrera y hace mas o menos un año lo vengo posponiendo por diversos motivos. Ahora lo tengo casi cocinado, lo que me falta es imprimir en un quickreport solo el ultimo campo ingresado en la tablas es un tipo maestro detalle y verdaderamente ya no se como puedo codificarlo, entre otras cosas probe esto:


QUICKREPORT28.Query1.ACTIVE:=FALSE;
QUICKREPORT28.QUERY1.PARAMBYNAME('TURNO.DNI').ASINTEGER:=2;
QUICKREPORT28.QUERY1.ACTIVE:=TRUE;
Pero no hay caso si hay alguien que pueda ayudarme se lo voy a agradecer!!! Muchas gracias
P\D: el sistema gestiona la entrega de turnos de un centro de salud.

Caral
31-05-2010, 02:23:31
Hola
No entiendo......
Que tiene que ver que sea maestro detalle?.
Que base de datos usas?.
Parece que te enlazas con BDE?.
Cual es el problema?, no te muestra algo?, que pretendes hacer?
Mas datos ayudan.
Saludos

coso
31-05-2010, 12:21:01
Hola,
para que te salgan campos en el QReport tienes que poner QRDBText y asociarlos a los campos que te interesan. Si lo que quieres es que tansolo te salga un registro especifico, por ejemplo el ultimo, lo bueno seria seleccionarlo en un query y ser este query el que asocias al quickreport (mediante la propiedad datasource) y tambien a los qrdbtext que uses. Espero haberme explicado. Un saludo.

Elizabethdelphi
01-06-2010, 00:19:11
Hola coso, lo que yo hago es escribir varios campos y luego guardarlos. estos ultimos campos son los que se tienen que imprimir(pero todos estos campos son de un mismo turno) como puedo codificarlo en el query y en que propiedad de este. Gracias por su ayuda!! Voy a ver si con lo que me escribio puedo resolver mi problema.. MIL GRACIAS!

Elizabethdelphi
01-06-2010, 00:35:16
Hola no se si tiene algo que ver que sea maestro detalle, yo aclare por las dudas, explico brevemente que lo que yo tengo son dos tablas cargo los datos en el form los guardo y pongo en un boton ( imprimir turno) este abre un quick report y lo que deberia hacer es mostrar estos ultimos campos guardados y no se como codificarlo y tampoco los muestra. y aveces muestra pero otros campos y no los ultimos que son los que necesito!! MUCHAS GRACIAS NUEVAMENTE!!

Casimiro Notevi
01-06-2010, 00:37:53
Creo que no se entiende bien qué problema tienes y qué quieres hacer.

Caral
01-06-2010, 02:13:37
Hola
Pues yo sigo sin entender.
Ya sabemos desde el principio que tiene un maestro detalle, pero, el maestro detalle no se hace con un query (que yo sepa), con lo cual queda la duda de la sentencia sql que hace para cargar las dos tablas.
Cuantos query usa en el qreport?, tiene Tables tambien?.
El dataset esta enlazado a algun lado?.
Lo campos del QReport estan bien?.
No se.....Digo.....
Saludos.
PD: Para mi saber que BD se usa es importante ya que muchas de las sentencias SQL no funcionan en una u otra, si no que lo diga yo.:)

coso
01-06-2010, 11:00:38
Hola,
los qrdbtext los tienes que colocar en bandas de detalle (detailbands). Creo que va por alla el problema. Un saludo.

Rolando Glez
01-06-2010, 15:51:39
El componente quickreport te permite imprimir determinados datos desde un datasource que puede ser una tabla o query, en el mismo hay varias bandas que en dependencia de su nombre se deben asignar entonces ud debe parametrizar la banda detail que es la que te permite sacar los datos a travez de un componente qrdbtext indicando el datasource asi como el datafield, cuando se usa Ttable todos los campos mapeados estan disponibles pero cuando se utiliza un tquery solo estaran disponible aquellos campos especificados en el select, con esto quiero decir que si utiliza select * from ..... entonces estaran disponibles todos los campos en el query ,pero si especifica solo algunos campos de la tabla asociada al Tquery entonces solo estaran disponible solo esos campos especificados, asi que debes de poner "select * from tabla en la sql del componente Tquery para obtener todos los campos de la tabla asociada y de esta forma esten disponibles en el quickreport

Elizabethdelphi
03-06-2010, 22:01:38
Hola a todos aquellos que tienen una buena predisposicion para conmigo y se detienen a leer mis mensajes, y asi me brindan su ayuda...
Bueno voy a tratar de explicarme mejor, el sistemita que estoy tratando de realizar lo estoy codificando en delphi 6, las tablas estan hechas en paradox 7, y si creo que se entrelazan con bde.
Explico que tengo un qreport y los campos que necesito mostrar con los qrdbtext asociados con las propiedades correspondientes a cada campo(que seria el datafield) el en dataset no coloque nada, ya que si coloco una tabla me muestra datos pero no lo que yo necesito y si coloco el query no se en que propiedad ni como codificarlo. Ya que necesito que se muestre el ultimo campo guardado en el form. Chicos espero que puedan entenderme... Muchisimas gracias!!

felipe88
04-06-2010, 04:23:19
Hola a todos aquellos que tienen una buena predisposicion para conmigo y se detienen a leer mis mensajes, y asi me brindan su ayuda...
Bueno voy a tratar de explicarme mejor, el sistemita que estoy tratando de realizar lo estoy codificando en delphi 6, las tablas estan hechas en paradox 7, y si creo que se entrelazan con bde.
Explico que tengo un qreport y los campos que necesito mostrar con los qrdbtext asociados con las propiedades correspondientes a cada campo(que seria el datafield) el en dataset no coloque nada, ya que si coloco una tabla me muestra datos pero no lo que yo necesito y si coloco el query no se en que propiedad ni como codificarlo. Ya que necesito que se muestre el ultimo campo guardado en el form. Chicos espero que puedan entenderme... Muchisimas gracias!!

Ese pedacito no me quedo claro, ¿como enlazas al DataField si el DataSet esta vacío?. Si solo necesitas que te muestre el último registro sencillamente lo puedes hacer mediante un query, así lo único que tienes que hacer en el código es abrirlo al mostrar el reporte.


Saludos!

Elizabethdelphi
04-06-2010, 22:21:22
Hola ya he realizado todo lo que me han propuesto... Ahora el problemita que tengo es que selecciono los campos en la propiedad sql del query pero me muestra cualquier campo menos el ultimo que es el que necesito.. Alguien sabe que comando se utiliza cuando pongo el select para que sea el ultimo campo el que me muestre... (A modo de ejemplo digo: Si tengo muchos campos similares en una tabla y quiero que me muestre campos distintos lo que escribo es select distinct, lo que pregunto es si hay algun comando que filtre el ultimo campo guardado. GRACIAS!! )

Casimiro Notevi
04-06-2010, 22:36:31
¿El último campo o el último registro?

Elizabethdelphi
05-06-2010, 02:34:39
el ultimo registro, perdon! jaja

Caral
05-06-2010, 02:34:51
Hola
........... lo que pregunto es si hay algun comando que filtre el ultimo campo guardado. GRACIAS!! )
Where
Saludos

felipe88
05-06-2010, 03:24:21
Hola,
si usas el componente Query solo añade esto a tu código Delphi:

TuQuery.Last;

Saludos!

ctrl_attack
02-07-2010, 22:52:35
otra forma tambien, no muy practica y de echo un mala manera de hacerlo, ya que solamente quieres que se imprima lo que se esta mostrando en el form;

aclaro no es la mejor forma de hacerlo asi que por favor no me regañen los maestros.

en el boton imprimir, pondrias que las qrlabels del quickreport fueran iguales a las que tienes en el formulario que llama al reporte es decir

procedure Tform1.imprimirClick(Sender: TObject);
begin
form2.QRLabel1.Caption:= Label1.Caption;
form2.QRLabel2.Caption:= Label2.Caption;
form2.QuickRep1.Preview;
end;

de esta manera, siempre imprimiras lo que este mostrando el form.

espero te sirva, aunque aclaro que una manera mas limpia es lo que comento felipe88, saludos

Jab
05-07-2010, 15:03:53
Elizabeth, genera una consulta Query y la ordenas descendentemente de tal manera que el primer registro es el más actual. Debe tener al menos un índice para ello, y en la consulta pones al final "ORDER BY ... ASC"

Luego en el Qreport, creas un dato como quieras, un QRBDText por ejemplo y lo enlazas al campo actual, como el registro es el último al que apunta te saldrá solamente un registro y que casualmente es el que necesitas.

Sobre la consulta

QUICKREPORT28.Query1.ACTIVE:=FALSE;
QUICKREPORT28.QUERY1.PARAMBYNAME('TURNO.DNI').ASINTEGER:=2;
QUICKREPORT28.QUERY1.ACTIVE:=TRUE;

Está equivocada, si quieres añadir el dato DNI lo primero es alfanumérico, lo segundo se añade directamente el nombre como lo tengas en la consulta, esto es, si tienes algo así

SELECT * FROM TB WHERE DNI =: DNI

recuerda que el dato se asigna como

QUICKREPORT28.QUERY1.PARAMBYNAME('DNI').ASSTRING:='555359299A' , por ejemplo...


No obstante, te recomiendo que generes la SQL directamente en código sin usar parámetros ya que aumenta el consumo de memoria. Es decir, es mejor generarl el código de esta manera

QUERY1.SQL.Close;
QUERY1.SQL.Unprepare;
QUERY1.SQL.Clear;
QUERY1.SQL.Add('SELECT * FROM ');
etc..
y para hacer la comparativa de WHERE
QUERY1.SQL.ADD('WHERE DNI = '+''''+ datodelDNI+ '''')

De esta manera de compara con la exclusividad del DNI.
Si además ordenas ascendentemente solamente tienes que acudir al primer registro, normalmente ya viene por defecto al ejecutar la Query con Prepare por ejemplo.