PDA

Ver la Versión Completa : Impresion Quick Report con consulta SQL


oec2509
25-06-2008, 18:34:17
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:

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
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
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
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
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
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 ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);

Salud OS

oec2509
25-06-2008, 20:07:19
Y que codigo tiene ese Código Delphi [-] (http://www.clubdelphi.com/foros/#)ejecutar_con_active(fm_rpt_necesidades.sql_necesidades, query);



Salud OS

Este es el codigo


Código SQL [-] (http://www.clubdelphi.com/foros/#)
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

query.ExecSQL;

para una consulta, cambialo por


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
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