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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.