Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ayuda con una consulta (https://www.clubdelphi.com/foros/showthread.php?t=72875)

leofuentes21 16-03-2011 17:34:57

ayuda con una consulta
 
hola amigos saludos
Necesito que me ayuden con esta consulta.
disculpen si no me se explicar bien pero no llevo mucho tiempo programando

lo que trato de hacer es por medio de una query hacer una consulta en la base de dato para que me muestre los datos de una fecha asta la otra los datos que esten entre esas dos fechas, para ello utiliso datetimepiecker y los datos del resultado de la consulta quiero que me los muestre en el reporte en qrlabels.La base de datos en firebir

este es lo que tengo:
Código Delphi [-]
if not frmmenu.database1.InTransaction then frmmenu.database1.StartTransaction;
      try
         with qry1 do
         begin
         Active:=False;
         SQL.Clear;
         SQL.Text:='SELECT FECHASOLICITUD FROM TSCBAST WHERE
          ((FECHASOLICITUD >='+QuotedStr(DateToStr(dtp1.Date))
                    +') AND (FECHASOLICITUD<='+QuotedStr(DateToStr(dtp2.Date))+'))';
         Active:=true;
         end;
         frmMenu.database1.commit;
         except
         frmMenu.database1.rollback;
         MessageDlg('Ocurrio un error en el porteo,intente de  nuevo',mtError,mbOKCancel,0);
         Exit;
       end;

      frmReporteFecha:= tfrmReporteFecha.create(nil);
       try
        frmReporteFecha.qrlbl6.Caption:=DateToStr(dtp1.Date);
        frmReporteFecha.qrlbl7.Caption:=DateToStr(dtp2.Date);
         frmReporteFecha.ReporteFecha.Preview;
       finally
        FreeAndNil(frmReporteFecha)
       end;

el problema es que crea muchas paginas en el qreport,espero me ayuden se lo agradesere mucho.

oscarac 16-03-2011 17:44:27

la pregunta del millon....
la informacion que se muestra en esas muchas hojas que te emite el reporte...
es valida?, es decir
esta dentro del rago de fechas que tu colocas?
no especificas la base de datos que usas.. imagino que es SQL

te recomendaria tomar en cuenta el tema de la fecha como parametro
Código Delphi [-]
Query.ParamByName('FechaInicio').AsDateTime := StrToDate(FormatDateTime('DD/MM/YYYY',DateTimePicker1.Date));

leofuentes21 16-03-2011 18:37:10

ok la base es sql.

y los datos que me muestra es la fecha que meto en los datetimpicker pero por ejemplo. si pongo 02/01/11 y 25/02/11 en el qreport me muestra esa fecha pero repetidas asta 490 paginas pero solo de esa misma fecha. no avansa sino que solo la misma fecha. y tengo mas registros de diferentes fechas no solo la misma. osea que no hace el filtro.

oscarac 16-03-2011 19:16:05

intenta colocar los resultados del query en un grid.. para descartar si es la consulta en si o el reporte

Caral 16-03-2011 19:30:11

Hola
Código Delphi [-]
if not frmmenu.database1.InTransaction then frmmenu.database1.StartTransaction;
      try
         with qry1 do
         begin
         Active:=False;
         SQL.Clear;
         SQL.Text:='SELECT FECHASOLICITUD FROM TSCBAST '+
                   ' WHERE FECHASOLICITUD >= :fec1 AND FECHASOLICITUD <= :fec2';
         Params[0].value:= DateToStr(dtp1.Date);
         Params[1].value:= DateToStr(dtp2.Date);
         Active:=true;

      frmReporteFecha:= tfrmReporteFecha.create(self);
       try
        frmReporteFecha.qrlbl6.Caption:=DateToStr(dtp1.Date);
        frmReporteFecha.qrlbl7.Caption:=DateToStr(dtp2.Date);
         frmReporteFecha.ReporteFecha.Preview;
       finally
        frmReporteFecha.Free;
       end;
Para mi lo demas sobra.
Saludos

leofuentes21 16-03-2011 21:49:20

ya lo prove en un grid y todo esta bien la consulta esta bien me da correcto los datos,entonces creo que es el reporte porque cuando lo ejecuto me abre muchas paginas solo con la fecha que esta en los datatimepicker en ves de las que quiero que me muestre.

rgstuamigo 16-03-2011 22:33:04

No confundir por favor
 
Cita:

Empezado por oscarac (Mensaje 393812)
...
no especificas la base de datos que usas.. imagino que es SQL:eek:

Cita:

Empezado por leofuentes21 (Mensaje 393817)
ok la base es sql.:eek:
...

Disculpenme..pero nada mas quiero aclarar que... SQL no es una Base de dato;):mad: sino más bien es un lenguaje estandar de acceso a Bases de datos..;)... supongo que tanto el amigo oscarac como tambien leofuentes21 se estan refiriendo más bien MS sql server que es un Servidor de base de dato.;) por lo tanto es un tremendo error decir o confundir el término "SQL" con "MS sql Server" ya que ambas cosas son diferentes. Hay que entender que la mayoría de Servidores de bases de datos(Oracle,MySQL,MS SQL Server,Firebird,SQLite,etc.) utilizan o soportan SQL( como lenguaje o sintaxis de consultas ;)), por eso es importante discriminar ambos términos;).. supongo que Microsoft fué muy inteligente al ponerle ese nombre a su servidor de base de dato para confundir a la gente de que MS SQL Server es igual a SQL y creo que lo logrado :(.
Anecdota: como anécdota les puedo contar que en alguna ocasión un amigo mio me contó que estaba diseñando una base de dato.. entonces le pregunté:
Cita:

¿En qué servidor de base de dato trabajas?
y él me respondió:
yo trabajo con SQL
a lo que respondí:
desde luego que trabajas usando el lenguaje SQL pero te pregunto ¿con qué servidor específico de base de dato estás trabajando?
Entonces me dijo:
No te entiendo..
Entonces procedí a explicarle la situacion...; desde luego yo ya entendía desde un principio que él estaba hablando de MS sql Server, pero me hice el de la vista gorda para explicarle el error que tenía al llamar SQL a servidor de MS sql server.
Desde entoces... mi amigo ya no le llama SQL sino más bién MS SQL server.:D....
Espero no ser tan intolerante por ésta aclaracion, pero creo que debemos llamar a las cosas como son...
Saludos...

oscarac 16-03-2011 23:43:45

jejeje
muy buena aclaracion

sabemos que el SQL es el lenguaje mas no la base de datos ... pero algunos de nosotros "abreviamos" el termino.. pero vale tu comentario y no lo considero intolerante.. mas bien es importante que las personas que recien entran a delphi y/o no tienen conocimientos de programacion puedan hacer esa diferenciacion

volviendo al tema en cuestion...
revisa bien las propiedades del reporte y si puedes las posteas

leofuentes21 17-03-2011 00:04:50

si esta buena la aclaracion y les agradesco,

con lo del reporte ya revise bien las propiedades tengo horas en eso y no le encuentro.
1) inserte bande de title para el titulo y una detalle para los labels que es ahi donde va apareser la informacion.
tambien cambie el dataset y llame de aaqui al formulario donde esta la query
y lo mismo con la banda detalle.

la verda no se si tenga algo malo hacermelo saber.

Caro 17-03-2011 15:11:15

Hola leofuentes21, supongo que tu Quickreport esta asociado a tu DataSet donde ejecutas la consulta, pero al utilizar solo qrLabels asignandole lo que tienes en tus DateTimePicker, te va ha repetir solo eso, la cantidad de veces del resultado de tu consulta, ya que esta dentro de una banda Detalle, para mostrar los datos de tu consulta puedes utilizar el QrDbText y sus propiedades DataSet y DataField.

Saluditos

Delphius 17-03-2011 18:29:18

Cita:

Empezado por oscarac (Mensaje 393847)
jejeje
muy buena aclaracion

sabemos que el SQL es el lenguaje mas no la base de datos ... pero algunos de nosotros "abreviamos" el termino..

OK, entonces también abreviaré a MySQL, PostgreSQL, y FirebirdSQL con SQL así evitamos cualquier confusión. :D ¡Listo, todos los motores a partir de hoy se llamarán SQL! :p :D

¡Si hay que ser... para hacer semejante cosa! :mad:

No hay vueltas... no es que seamos intolerantes, es que hay que hacer un esfuerzo por hablar bien, y eso hace también al tema de ser un buen profesional.
El caso que expone rgstuamigo es más común de lo que se piensa. Hacen ya demasiado mal, y denigran la profesión ¡Hay tanto que asegura que SQL es un motor de base de datos!

Las cosas como son, por favor... nada de inventar abreviaciones; ¡quedás peor!

Saludos,

oscarac 17-03-2011 18:43:37

ok
Aclarado 1, Aclarado 2....

ahora tratemos de ayudar a leofuentes21

leofuentes21 17-03-2011 23:52:37

todavia no me funciona. ya le cambie los labels por los qrdbtext y la propieda dataset tiene qry1 y datafield los campo.
2)El qreport tengo la propiedad dataset qry1.

ok. lo que yo quiero es inyectarle a la qry1 la consulta(el codigo que esta en los comentarios anteriores) desde otro form que es lo que he estado intentando y no me muestra la informacion en el reporte.

ya prove hacer consulta a la qry en el reporte y lo ace bien pero del otro form que es donde tengo la consulta en un button no lo hace,no me funciona.no me muestra datos,no se si hice algo malo o si no me doy a explicar bien.

oscarac 18-03-2011 06:36:31

en el reporte (supongo qr......pas) has colocado el
use frm......pas ? donde "usas" el formulario donde esta el query?

yo normalmente "armo" una cadena mas o menos de esta manera
Código Delphi [-]
   strSql := 'select Left(M.cuenta, ' + edtDigito.Text + ') As Cuenta,' +
               ' SUM (Case when DH = ' + QuotedStr('D') + ' then u_IMP else 0.00 End) AS DEBE, ' +
               ' SUM (Case when DH = ' + QuotedStr('H') +  ' then u_IMP else 0.00 End) AS HABER ' +
               ' from TblMovimientoContable M ' +
               ' where M.Empresa = ' + QuotedStr(dmGlobal.g_CodigoEmpresa) + ' and M.Periodo = ' + QuotedStr(dmGlobal.g_Periodo) +
               ' group by Left(M.CUENTA, ' + edtDigito.Text + ') Order by Left(M.CUENTA, ' + edtDigito.Text + ')';
     if qrBalanceComprobacionMensual = Nil then
        qrBalanceComprobacionMensual := TqrBalanceComprobacionMensual.Create(Nil);
      with qrBalanceComprobacionMensual do
      begin
        qrLabelCompany.Caption := dmGlobal.g_NombreEmpresa;
        qrlRuc.Caption := dmGlobal.g_RUCEmpresa;
        rSubTitulo.Caption := 'Mensual del mes de ' + NombreMes (StrtoInT (dmGlobal.g_Mes)) + ' - ' + Copy (dmGlobal.g_Periodo,1,4);
        begin
            qryBalanceComprobacionMensual.Sql.Clear;
            qryBalanceComprobacionMensual.SQL.Add(strSql);
            qryBalanceComprobacionMensual.Open;
            if qryBalanceComprobacionMensual.IsEmpty then
              MessageDlg('No existen Movimientos en el mes',mtWarning,[mbRetry],0)
            else
              preview;
            qryBalanceComprobacionMensual.Close;
          end
      end;
      FreeAndNil(qrBalanceComprobacionMensual);


algo asi....
quiza debas poner lineas del codigo tanto del form como del reporte para entender mejor

leofuentes21 18-03-2011 17:34:18

OK. mira
LAS FECHAS LAS INGRESO EN LOS DATATIMEPICKER.
este es mi codigo que tengo en el button del form


Código Delphi [-]
with frmReporteFecha.qry1 do
        begin
        Active:=false;
        SQL.Clear;
        SQL.Text:='SELECT FECHASOLICITUD,DOCUMENTO,DESCCLIENTE FROM TSCBAST WHERE((FECHASOLICITUD >='+QuotedStr(DateToStr(dtp1.Date))
                  +') AND (FECHASOLICITUD<='+QuotedStr(DateToStr(dtp2.Date))+'))';
        Active:=True;
        end;
        frmReporteFecha:=TfrmREPORTEFECHA.CREATE(NIL);
        try
        frmReporteFecha.qrdbtxtFECHASOLICITUD.Caption:=DATETOSTR(dtp1.Date);
          frmReporteFecha.qrdbtxtFECHASOLICITUD1.Caption:=DATETOSTR(dtp2.Date);
        frmReporteFecha.qrdbtxtDOCUMENTO.Caption:=frmReporteFecha.qry1.fieldbyname('DOCUMENTO').AsString;
        frmReporteFecha.qrdbtxtDESCCLIENTE.Caption:=frmReporteFecha.qry1.fieldbyname('DESCCLIENTE').AsString  ;
        frmReporteFecha.Reportefecha.preview;
        finally
        frmReporteFecha.Reportefecha.Free;
        end;

y en oTro form es donde tengo el reporte donde esta el quickport y la qry1.
el qreport dataset tengo enlasado a la qry, los qrdbtext los prodiedad dataset enlasada a la qry1 y datafield a ls campos. No se que esta mal o que mas puedo hacer.?

oscarac 18-03-2011 18:03:41

trata de "aislar" tu data empaqueta solo el form y el reporte y subelo al ftp para revisarlo

rgstuamigo 18-03-2011 18:24:10

Bueno es un tema que se ha tratado muchas veces, por ejemplo para ejecutar una consulta SQL entre dos fechas puedes ver éste hilo por ejemplo.
Para que lo podamos enviar al reporte sencilamente debemos asignar el dataset(Query,Table,etc) específico a nuestro componente QuickRep y utilizar una banda detalle en la que tengamos componentes como QRDBText por ejemplo (uno por cada columna o campo de nuestra consulta SQL), a los cuales tambien hay que asignarles el mismo DataSet(Propiedad DataSet) he indicarle el campo(columna) atraves de la propiedad DataField con la que van a trabajar.;)
Al abrir(Active=True) el dataset y darle una vista previa(Preview) al reporte, ya se podrá visualizar e imprimir todos los registros obtenidos en la consulta.;) Y eso es todo...:cool:
Saludos...:)

oscarac 18-03-2011 18:36:25

muy bien explicado !!!

leofuentes21 18-03-2011 23:58:34

gracias me sirvio la informacion.
y le hice unos arreglos al codigo cuando llamaba a la qry.
aki
Código Delphi [-]
frmReporteFecha:=TfrmREPORTEFECHA.CREATE(NIL);
try  frmReporteFecha.qry1.ParamByName('FECHASOLICITUD1').AsString:=DateToStr(dtp1.Date); 

frmReporteFecha.qry1.ParamByName('FECHASOLICITUD2').AsString:=DateToStr(dtp2.Date);
        frmReporteFecha.qry1.Active:=True;
        frmReporteFecha.Reportefecha.preview;
        finally
        frmReporteFecha.Reportefecha.Free;
        end;


La franja horaria es GMT +2. Ahora son las 18:56:06.

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