Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Impresion Quick Report con consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=57714)

oec2509 25-06-2008 18:34:17

Impresion Quick Report con consulta SQL
 
Buenos dias compañeros del foro, Tengo una aplicación en Delphi 7 con SQL-2000 trabajo en Windows Xp sp2
Soy bastante nuevo en Delphi, he estado experimentando con quick report con los ejemplos Q2 Y Q3 pude ubicarme en mas o menos como crear un reporte y enviar a imprimir, Yo utilizo consultas de SQL para pasar los datos, utilizando Tquery y tengo la siguiente:
Código Delphi [-]
if ck_solo_mayores.Checked then begin
query:='SELECT CODIGO, DESCRIPCION, ANCHO, '+
'LARGO, CANTIDAD, EXISTENCIA '+
'FROM RESUMEN_NECESIDADES_ESPUMA '+
'WHERE CANTIDAD>=1 '+
'ORDER BY N.CODIGO, ANCHO, LARGO ';
end else begin
query:='SELECT CODIGO, DESCRIPCION, ANCHO, '+
'LARGO, CANTIDAD '+
'FROM RESUMEN_NECESIDADES_ESPUMA WHERE CANTIDAD>0 '+
'ORDER BY N.CODIGO, ANCHO, LARGO, EXISTENCIA ';
end;
ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);
report.DataSet:=fm_rpt_necesidades.sql_necesidades;
report.Prepare;
report.Preview;
Pero me da el problema de que solo un registro, el ultimo, alguien me podria dar una luz de que estoy haciendo mal?

sql_necesidades es el Tquery y fm_rpt_necesidades es la forma donde esta el TQuickRep

Desde ya muchas gracias por toda la ayuda

Caral 25-06-2008 18:39:52

Hola
No estoy seguro del por que el ultimo, normalmente cuando no se conecta el Dataset del QReport lo que muestra es solo el primero.
Si no es el dataset, puede ser algun problema con la consulta.
Saludos

marcoszorrilla 25-06-2008 18:47:02

Por qué no visualizas la consulta en una rejilla provisionalmente, puede ser que por algún motivo como apunta Carlos solamente te esté devolviendo un registro.

Un Saludo.

oec2509 25-06-2008 18:49:46

Estoy seguro de que la consulta no tiene ningun problema, porque la tengo en un DataGrid previo

egostar 25-06-2008 18:52:38

Ya asignaste la propiedad DataSet del QReport al sql_necesidades :confused:

Salud OS

oec2509 25-06-2008 18:56:39

Si lo asigne aca

ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);
report.DataSet:=fm_rpt_necesidades.sql_necesidades; ****

No si asi es lo correcto

Caral 25-06-2008 19:02:02

Hola
En el codigo aparece la palabra Query en donde esta la sentencia sql.
Pregunto:
Query esta referenciado a fm_rpt_necesidades.sql_necesidades
Osea sql_necesidades esta ligado a query?, donde?
Saludos

egostar 25-06-2008 19:02:21

Cita:

Empezado por oec2509 (Mensaje 296103)
Si lo asigne aca

ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);
report.DataSet:=fm_rpt_necesidades.sql_necesidades; ****

No si asi es lo correcto

En que evento o donde has colocado ese código?
Es necesario que lo hagas en tiempo de ejecución ?,
No te basta colocarlo en tiempo de diseño?

Salud OS

oec2509 25-06-2008 19:10:50

Cita:

Empezado por Caral (Mensaje 296107)
Hola
En el codigo aparece la palabra Query en donde esta la sentencia sql.
Pregunto:
Query esta referenciado a fm_rpt_necesidades.sql_necesidades
Osea sql_necesidades esta ligado a query?, donde?
Saludos

query es una variable y es donde esta la consulta

query:='SELECT CODIGO, DESCRIPCION, ANCHO, '+
'LARGO, CANTIDAD '+
'FROM RESUMEN_NECESIDADES_ESPUMA WHERE CANTIDAD>0 '+
'ORDER BY N.CODIGO, ANCHO, LARGO, EXISTENCIA ';
end;
ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);

esta referenciado en el ejecutar_con_active que es una funcion para realizar la consulta

oec2509 25-06-2008 19:12:04

Cita:

Empezado por egostar (Mensaje 296108)
En que evento o donde has colocado ese código?
Es necesario que lo hagas en tiempo de ejecución ?,
No te basta colocarlo en tiempo de diseño?

Salud OS

Todo el codigo que envie esta en un boton y se ejecuta al presionarlo, ya no estoy seguro si es en tiempo de ejecucion o no, como hago para saberlo?

egostar 25-06-2008 19:15:48

Cita:

Empezado por oec2509 (Mensaje 296114)
Todo el codigo que envie esta en un boton y se ejecuta al presionarlo, ya no estoy seguro si es en tiempo de ejecucion o no, como hago para saberlo?

Bueno, es que estás asignando por código el DataSet, a eso se le llama en tiempo de ejecución (runtime), lo que yo te recomiendo es que en lugar de hacerlo así lo asignes directamente en la propiedad DataSet del QReport.

Seria bueno que colocaras todo el código de tu procedimiento para saber con mas certeza que puede estar sucediendo.

Salud OS

oec2509 25-06-2008 19:47:40

Cita:

Empezado por egostar (Mensaje 296115)
Bueno, es que estás asignando por código el DataSet, a eso se le llama en tiempo de ejecución (runtime), lo que yo te recomiendo es que en lugar de hacerlo así lo asignes directamente en la propiedad DataSet del QReport.

Seria bueno que colocaras todo el código de tu procedimiento para saber con mas certeza que puede estar sucediendo.

Salud OS

Gracias... por la ayuda que me han brindado hasta el momento aca esta el codigo del boton

procedure Tfm_necesidades_espumado.btn_reportesClick(Sender: TObject);
var
query:String;
begin

report := fm_rpt_necesidades.rpt_necesidades;
if ck_solo_mayores.Checked then begin
query:='SELECT CODIGO, DESCRIPCION, ANCHO, '+
'LARGO, CANTIDAD, EXISTENCIA '+
'FROM RESUMEN_NECESIDADES_ESPUMA '+
'WHERE CANTIDAD>=1 '+
'ORDER BY N.CODIGO, ANCHO, LARGO ';
end else begin
query:='SELECT CODIGO, DESCRIPCION, ANCHO, '+
'LARGO, CANTIDAD '+
'FROM RESUMEN_NECESIDADES_ESPUMA WHERE CANTIDAD>0 '+
'ORDER BY N.CODIGO, ANCHO, LARGO, EXISTENCIA ';
end;
ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);
report.DataSet:=fm_rpt_necesidades.sql_necesidades;
report.Prepare;
report.Preview;
end;

egostar 25-06-2008 19:59:07

Y que codigo tiene ese
Código Delphi [-]
ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);

Salud OS

oec2509 25-06-2008 20:07:19

Cita:

Empezado por egostar (Mensaje 296141)
Y que codigo tiene ese Código Delphi [-]ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);



Salud OS

Este es el codigo


Código SQL [-]
procedure ejecutar_con_active(Query : Tquery; inst : String);
begin

try
query.active := false;
query.sql.clear;
query.SQL.Add(inst);
query.ExecSQL;
query.active := true;
Except on E : Exception do
MessageDlg(E.message + ''#13#10#13#10'' + inst,
mterror, [mbOk], 0); end;
end;

egostar 25-06-2008 20:27:23

Ahh

Pues ya veo, estas usando

Código Delphi [-]
query.ExecSQL;
para una consulta, cambialo por

Código Delphi [-]
query.Open;

De cualquier forma, creo que puedes optimizar tu código y hacerlo mas simple.

Salud OS

PD; usa las etiquetas delphi para que tu código se entienda

oec2509 25-06-2008 20:34:13

Que pena con uds. compañeros, ya solucione el problema y no estaba en esta parte del codigo, la consulta estaba correcta, el error que estaba cometiendo es que coloque los campos fuera del la banda QRSubDetail en el TQuickRep, asi que movi los campos al detalle y Ya funciona bien

Les agradezco toda la ayuda brindada por uds.

Muchas Gracias

egostar 25-06-2008 20:36:27

Cita:

Empezado por oec2509 (Mensaje 296168)
Que pena con uds. compañeros, ya solucione el problema y no estaba en esta parte del codigo, la consulta estaba correcta, el error que estaba cometiendo es que coloque los campos fuera del la banda QRSubDetail en el TQuickRep, asi que movi los campos al detalle y Ya funciona bien

Les agradezco toda la ayuda brindada por uds.

Muchas Gracias

Hombre pues que bien, solo toma nota de lo que te comento, para consultas se debe usar Query1.Open, para Agregar, Cambiar o Borrar Query1.ExecQL.

Salud OS


La franja horaria es GMT +2. Ahora son las 17:51:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi