如何设置TABLE控件中的filter属性过滤一段时间内的记录(50分)

  • 主题发起人 主题发起人 zhang
  • 开始时间 开始时间
Z

zhang

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库中有一日期时间字段名datetime,欲过滤一段时间内的记录.如:显示begindatetime至enddatetime时间段内的记录(begindatetime及enddatetime是Tdatetime变量).该如何设置TABLE控件中的filter属性?我用的是PARADOX数据库.
table控件的setranger方法已可实现.我只想请教filter属性中的编写方法.
 
TTable构件的Filter不能过滤日期,TQuery可以。
语法和SQL中的条件一样
With SampleQuery do
begin
Filtered:=false;
Filter:='Day <= '+chr(39)+datetostr(date())+chr(39)
Filtered := true;
Open
end;
 
用filter可以过滤日期,
只是与在sql语句中用的日期格式不一定相同;
在filter中的日期格式要与系统日期格式相同,比如相同日期格式是
dd/mm/yyyy,filter中的日期也是'dd/mm/yyyy',而在sql中就不是这样的
.
 
var
dateB,dateE: string;
begin
dateB:=datetostr(strtodate(date));
dateE:=datetostr(strtodate(date+10));
table1.filter:='MyDate>='''+dateB+''' and MyDate<='''+dateE+'''';
table1.filtered:=true;
...
end;
 
各位,也许是我没有表达清楚,数据库中的字段类型是日期时间型,包括年,月,日,时,分,秒,时间间隔或许只有几分钟.
另外,据我所知将日期类型转化为字符串类型,若在19xx至20xx年间进行过滤,检索
会不正常.我用的是DELPHI 3.
望各位再赐教!
 
可以用decode函数
 
Filtered为TRUE
1. 在TTable 的Filter属性中用格式画字符串
2. 在Table 的OnFilterRecord事件中写程序
返回ACCEPT是一个条件等/不等式(BOOLEAN),
ACCEPT := DATASET[FIELD1] > DATASET[FIELD2]+50
3.关于你的问题
  ACCEPT := DATASET[YOUR_DATETIMEFIELD] > YOUWANT_DATETIME
推荐用2方法
 
再问bluebrid
在TTable 的Filter属性中用格式画字符串,我曾试过.
我的代码是format('datafield>%x',datetime),x应为何字母,若x是
s,写为format('datafield>%s',datetimetostr(datetime)),似乎
行不通.
 
to zhang the help in delphi:

S := FormatDateTime('"The meeting is on" dddd, mmmm d, yyyy, ' +

'"at" hh:mm AM/PM', StrToDateTime('2/15/95 10:30am'));
 
用formatdatetime效果最好
 
我觉的还是用ONFilterRecord事件容易一些,直接比较日期,我想是可以的。
 


//示例如下:后面有注释!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, StdCtrls, Db, DBTables, ComCtrls;

type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
Button1: TButton;
DBGrid1: TDBGrid;
DateTimePicker1: TDateTimePicker;
procedure Button1Click(Sender: TObject);
procedure Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filtered := True;
Table1.Active := not Table1.Active;
end;

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := table1.FieldValues['SaleDate']>self.DateTimePicker1.Date;//用DateTimePicker返回的日期(Tdatetime)
//accept为 Boolean 类型
end;
//一定先要把Table1的Filtered属性改为True
end.

我是在D4下用demos 中的ORDERS.DB试的,绝对没有问题
 
哦,忘了告诉你,用OnfilterRecord时不要设Filter属性
 
谢谢各位!分数不多,诠作谢意.
 
多人接受答案了。
 
后退
顶部