Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Filtrar una tabla con 2 rangos (https://www.clubdelphi.com/foros/showthread.php?t=31172)

maravert 30-04-2006 03:46:53

Filtrar una tabla con 2 rangos
 
Hola a todos ustedes, espero puedan ayudarme:

Estoy haciendo un programa para filtrar una tabla (Ventas.db) donde tiene entre otros campos: fecha_doc, importetotal, etc.

El usuario va a poner de que fecha a que fecha quiere el reporte, para lo cual utilizo un control edit1.tex para la fechainicial y un edit2.text para la fechafinal.

La idea es al dar los 2 rangos filtre y se imprima la informaciòn con un QuickReport .

El programa de la Unidad 1 es la siguiente:


Código Delphi [-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit;
Edit2: TEdit;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fecha1, fecha2 : string;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
fecha1 := edit1.text;
fecha2 := edit2.text;
Form2.show;
end;

end.








Cuando el usuario da click en el boton se carga la unidad 2 y me dice que no encuentra la variable fecha1 que es la fechainicial, lo que sè es que para que se pasen las variables de una unidad a otra se tiene que declarar la unidad en


Código Delphi [-]
implementation
uses Unit2;l





El codigo de la unidad 2 es el siguiente




Código Delphi [-]
unit Unit2;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, DB, DBTables,Unit1;
type
TForm2 = class(TForm)
QuickRep1: TQuickRep;
PageFooterBand1: TQRBand;
QRExpr1: TQRExpr;
ColumnHeaderBand1: TQRBand;
DetailBand1: TQRBand;
QRLabel1: TQRLabel;
QRExpr2: TQRExpr;
QRLabel2: TQRLabel;
QRExpr3: TQRExpr;
QRLabel3: TQRLabel;
QRExpr4: TQRExpr;
QRLabel4: TQRLabel;
QRExpr5: TQRExpr;
QRLabel5: TQRLabel;
QRExpr6: TQRExpr;
QRLabel6: TQRLabel;
QRExpr7: TQRExpr;
QRLabel7: TQRLabel;
QRExpr8: TQRExpr;
Table1: TTable;
procedure FormActivate(Sender: TObject);
private
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.FormActivate(Sender: TObject);
var
str : string;

begin
str := 'fecha_doc >= fecha1' and 'fecha_doc <= fecha2';
table1.Filter := str;
table1.Filtered := True;
quickrep1.Preview;
end;










Siempre me dice que no encuentra la variable fecha1, espero que alguien me pueda ayudar a resolver este problema o decirme otra manera de hacerlo.

Gracias por su apoyo.

Alejandro Maravert

pfsoft 30-04-2006 12:08:27

Vayamos por partes:


"Cuando el usuario da click en el boton se carga la unidad 2 y me dice que no encuentra la variable fecha1 que es la fechainicial, lo que sè es que para que se pasen las variables de una unidad a otra se tiene que declarar la unidad en


Código Delphi [-]
implementation
uses Unit2;l"

Esto no es para que una variables de Unit1 se pueda utilizar en Unit2. Es para poder acceder a Unit2 desde Unit1, esto es, poder llamar al formulario de Unit2, poder llamar a alguna función o procedimiento de Unit2 desde Unit2.

Por otra parte el error que te da de fecha1 variable no encontrada es debido a que cuando pones ' ..... >= fecha1' la sentencia SQL interpreta está comparando la parte izquierda con una supuesta variables fecha1, cuando lo que tendrías que poner sería '.....>='+fecha1

Y para pasar el valor de fecha1 y fecha2 a Unit2, una opción es declarar fecha1 y fecha2 en el public de la interface seccion del type del Form en Unit2, NO en Unit1.

P.E.

En Unit1 pondrías

Application.CreateForm(frmForm2, TForm2);
with frmForm2 do
try
fecha1 := edFecha1.text;
fecha2 := edFecha2.text;
ShowModal;
finally;
Free;
end;

No se si me he explicado con claridad. Dame un toque si te puedo ayudar.

Atte.

Pedro J.Fdez.
pedrofdez@ono.com
pfsoftware@ono.com

maravert 30-04-2006 19:10:43

Gracias
 
Gracias por tu respuesta, ahorita mismo lo voy a probar


La franja horaria es GMT +2. Ahora son las 23:39:46.

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