PDA

Ver la Versión Completa : qrmemo problemas con QuickReport


alej.villa
20-09-2011, 18:45:15
Buenos dias estoy utilizando Delphi 7, manejador de base de datos MS SQL Server 2005,
y quickreport v3.0 la que viene por defecto con delphi 7
Mi problema es el siguiente hago una consulta sql en una tabla llamada
temporal para que me seleccione todos los datos y me los ordene a
conveniencia del usuario, para esto tengo 2 radiobuttons uno para ordenarlo
por numero de cedula y el otro para ordenarlo por lineas, y un boton que lo
llame vista previa que es donde coloco esta consulta SQL segun la
conveniencia del usuario si seleccionan para ordenarlo por cedula es este
codigo

if Apellidos.Checked then
begin
dm.qLista.Close;
dm.qLista.SQL.Clear;
dm.qLista.SQL.Add('Select * FROM Temporal');
dm.qLista.SQL.Add('Order by nombres ASC');
dm.qLista.Open;
while not dm.qLista.Eof do
begin
qrLista.QRMemo1.Lines.Add(dm.qLista.fieldbyname('cedula').AsString);
qrLista.QRMemo2.Lines.Add(dm.qLista.fieldbyname('nombres').AsString);
qrLista.QRMemo3.Lines.Add(dm.qLista.fieldbyname('codigo_linea').AsString);
qrLista.QRMemo4.Lines.Add(dm.qLista.fieldbyname('posicion').AsString);
qrLista.QRMemo5.Lines.add(dm.qLista.fieldbyname('grupo').AsString);
dm.qLista.Next;
end;
end;

si seleccionan para ordenarlo por linea es este

if Linea.Checked then
begin
dm.qLista.Close;
dm.qLista.SQL.Clear;
dm.qLista.SQL.Add('Select * FROM Temporal');
dm.qLista.SQL.Add('Order by codigo_linea ASC');
dm.qLista.Open;
while not dm.qLista.Eof do
begin
qrLista.QRMemo1.Lines.Add(dm.qLista.fieldbyname('cedula').AsString);
qrLista.QRMemo2.Lines.Add(dm.qLista.fieldbyname('nombres').AsString);
qrLista.QRMemo3.Lines.Add(dm.qLista.fieldbyname('codigo_linea').AsString);
qrLista.QRMemo4.Lines.Add(dm.qLista.fieldbyname('posicion').AsString);
qrLista.QRMemo5.Lines.Add(dm.qLista.fieldbyname('grupo').AsString);
dm.qLista.Next;
end;
end;

el problema aparece cuando es mas de 1 hoja que debe imprimir, porque me imprime en la primera hoja todas las cedulas y en la 2da hoja todos los demas datos que serian: nombres, sexo, etc. adjunto un ejemplo para que vean como sale el reporte, gracias de antemano y ojala puedan ayudarme ya que tengo tiempo hechando cabeza con este error pero no logro llegar a la solucion

alej.villa
20-09-2011, 18:47:16
otra cosa el problema aumenta a medida que aumentan las paginas en el reporte

alej.villa
21-09-2011, 03:38:33
necesito ayuda por favor!!!!

olbeup
21-09-2011, 07:49:45
¿En que parte del programa agregas los datos?, ¿Por que lo haces manual?, pudiendo que el QuickReport lo realice el mismo, ¿Por que utilizas QRMemo, en vez de QRDBText?

Un saludo.

marcoszorrilla
21-09-2011, 11:00:09
Como ya te indican tienes que utilizar un QrDbText.

Un Saludo.

alej.villa
21-09-2011, 14:22:44
el problema que tengo es que los datos los filtro en un query para que me los ordene como quiero, si probe haciendolo con un QRDBtext pero no me los ordena como quiero sino que me los pasa como estan ordenados por defecto en la base de datos, si saben como hacer para que los datos se agreguen al QReport de manera ordenada con el query como puse el ejemplo anteriormente se los agradeceria.
Un saludo

alej.villa
21-09-2011, 14:49:32
alguna idea al respecto?

alej.villa
21-09-2011, 15:33:12
Ya cambie los QRMemo por QRDBText, en la propiedad del dataset del QuickReport lo tengo ligado al query de la consulta, las Bandas que uso en el quickreport para mostrar el reporte son: Page Header, Title, Column Header y un sub detail que en su propiedad de dataset tambien lo tengo asociado al query de la consulta, en el subdetail tengo agregados los QRDBText que necesito para que me muestre los datos, en la propiedad de Autozise, AutoStrech y Wordwrap del QRDBText estan en true, pero aun asi no me muestra ningun dato, lo mas interesante es que me muestra varias paginas pero vacias :s
No se porque sucede esto estoy investigando a ver si consigo la solucion a mi problema, pero les agradeceria si pudieran orientarme un poco hacia la solucion.
Gracias de antemano.

alej.villa
21-09-2011, 18:58:12
estube buscando en google y aqui en el foro pero no tengo idea como solucionarlo :confused:

alej.villa
21-09-2011, 20:03:38
y a mi nadie me ayuda.!!

ecfisa
21-09-2011, 22:45:08
Hola Alej.Villa.

Al igual que te han sugerido yo descartaría los QRMemos.

Creo que en tu caso lo que te conviene es usar un TQRBand con su propiedad BandType = rbTitle y un TQRSubDetail asociado al query mediante su propiedad DataSet.

En el TQRBand ponés la cabecera del listado y en el TQRSubDetail los campos que deseas encolumnar.

Te adjunto una imágen por si te resulta más entendible:

http://www.imagengratis.org/images/qrdibujo.jpg

De ese modo sólo debés abrir dm.qLista para generar el reporte, es decir que tu código podría quedar más o menos así:

if Apellidos.Checked then
begin
dm.qLista.Close;
dm.qLista.SQL.Clear;
dm.qLista.SQL.Add('Select * FROM Temporal');
dm.qLista.SQL.Add('Order by nombres ASC');
dm.qLista.Open;
end;

Y

if Linea.Checked then
begin
dm.qLista.Close;
dm.qLista.SQL.Clear;
dm.qLista.SQL.Add('Select * FROM Temporal');
dm.qLista.SQL.Add('Order by codigo_linea ASC');
dm.qLista.Open;
end;


Saludos.

alej.villa
21-09-2011, 22:56:58
hola ecfisa la verdad es que deberia "funcionar" de la manera que me dijiste pero lo real es que me da un error y de los feos porque no me dice la causa del problema
Adjunte una imagen del problema a ver si me ayudan con eso :confused:

alej.villa
21-09-2011, 23:01:10
Por eso estaba utilizando los QRMemo aunque no me daban un error como tal, si los daba cuando la pagina a mostrar era mas de 1 como mensione al principio del hilo en el archivo adjuntado, lo otro que me paso fue que utilize los QRDBText los enlace a mi query, el QR tambien lo enlace y no me daba ningun error pero no me mostraba ningun dato y la verdad es que estoy quedando casi calvo con este error que llevo tiempo resolviendolo

ecfisa
21-09-2011, 23:13:47
Hola alej.villa.

Aunque generalmente los Access violation se producen por utilizar un recurso no creado o liberar uno inexistente, visto el error, es casi imposible saber el por qué.

¿ Has tratado de circunscribirlo con el uso de Breaks y Trace Into (F7) ?


Un saludo.

alej.villa
21-09-2011, 23:17:17
no voy a tratar a ver en un ratico vuelvo para comentar lo sucedido

alej.villa
21-09-2011, 23:28:35
ok no quisiera desviarme del tema pero la verdad es que encontre varios .pas que no los encuentra, y son de un componente que me baje para exportar a excel (que por cierto nunca lo use) el componente se llama firesoft o la compañia nose :s
Ok el detalle esta en como los elimino para que no me siga generando errores si no los estoy usando en mi aplicacion? :s

ecfisa
21-09-2011, 23:37:00
Hola.

Component -> Install Packages -> Design Packages -> Remove

Saludos.

alej.villa
22-09-2011, 00:14:06
ya resolvi lo del componente, y el reporte sale en blanco no muestra nada :s no tengo ni idea que pasa

ecfisa
22-09-2011, 01:23:01
Hola.

Hacé una prueba:

Poné un TQuickRep, un TQRSubDetail, agrega un TIBQuery, TADOQueyr, TQuery o el componente que uses, dos o tres TQRDBText asignales el query al DataSet y el DataField que deses de la tabla.

Desde el Object Inspector asigna la propiedad Database y en la propiedad SQL del query que uses pone: Select * FROM Temporal Order by nombres ASC.

Poné la propiedad Active del query = True y presioná el botón derecho del mouse sobre el QuickRep, elegí Preview.

Tendrías que visualizar los datos sin problemas

Saludos.

alej.villa
22-09-2011, 14:04:01
hola ecfisa hice todo paso por paso como me lo indicaste, pero la verdad es que muestra un solo registro :s coloque autostrech = true, autozise = true y worwrap = true y nada enlace todo al query, es decir, el QReport y el QRSubDetails pero nada, solo me aparece el primer registro no muestra mas nada :s

alej.villa
22-09-2011, 15:28:51
Listo compañeros delphistas :D ya quedo solucionado mi problema,
Gracias ecfisa por tus consejos quedo perfecto
saludos a todos y gracias por su tiempo :D

olbeup
23-09-2011, 22:55:53
alej.villa, si con toda la información que te ha suministrado, paso por paso, no te funciona, o tienes algo en tu ordenador o ya no se que pensar, utiliza otro ordenador y haz lo mismo con el reporte anterior.

Un saludo.

p.d.: algo se te estará pasando, que al final sera una tontería,
crea un formulario nuevo en blanco, y empieza desde el principio.

olbeup
23-09-2011, 22:58:16
ups, ya te funiona, dinos lo que estaba mal.

Un saludo.

alej.villa
24-09-2011, 00:26:15
Bueno la verdad es que lo que hice fue borrar ese reporte y crear uno nuevo, enlace el reporte al query de la consulta, y los QRDBText tambien los enlace al query y a los campos que queria que mostrara, el error que me sucedio fue que nunca enlace el reporte al query y utilizaba QRMemo que me funcionaban perfecto cuando era una sola hoja, la verdad es que nose porque pasaba eso porque si funcionaba bien con una sola hoja deberia funcionar cuando hayan mas hojas por igual pero no fue asi..
ahora cada vez que genero la consulta salen los datos tal cual los necesito jeje
PD: en otro reporte trabajo con QRMemo y no me ha dado rollo (hasta ahora);

tocomi
26-09-2011, 16:27:24
no has probado usar un Qrsubdetail????

alej.villa
26-09-2011, 16:41:46
No entiendo tu pregunta tocomi :confused:

adrianstr
29-09-2011, 20:20:16
Hola amigo veo que te estas ahogando en un vaso de agua. El reporte que intentas hacer es una de los mas faciles de crear, si embargo te digo tambien te digo que tu codigo no esta del bien optimizado para crear esa simple consulta te explico primero lo de la consulta:
dices que quieres ordenar el query en base al check seleccionado entonces pueder hacer esto:

var ordenar:string;
begin
if Apellidos.checked then
ordernar:=' Order by Nombres ASC;
if cedula.checked then
ordenar:=' Order by Cedula ASC';


dm.qLista.SQL.Clear;
dm.qLista.SQL.Add('Select * FROM Temporal');
dm.qLista.SQL.Add(ordenar);
dm.qLista.Open;
end;

asi de simple quedaria tu consulta, ahora para imprimirlo tambien es muy facil, el error que haz cometido anteriormente es que haz puesto un QRBand con su propiedad BandType=rbSubDetail lo cual es incorrecto, el componente QrBand esta bien solo es la propiedad que esta mal, ya que deberia ser rbDetail y ojo tambien con que el QuickRep en su propiedad DataSet Apunte al Query.

Componente propiedad valor
QuickRep DataSet Query
QrBand BandType rbDetail
QRDBText las propiedades y valores correspondientes



espero te sea útil esta información