怎样使用过滤器?(20分)

  • 主题发起人 主题发起人 guanyanan
  • 开始时间 开始时间
G

guanyanan

Unregistered / Unconfirmed
GUEST, unregistred user!
table控件中的fliter属性在运行过程中,应如赋值?请举例说明,谢谢
 
str:=tjue.fieldbyname('dh').asstring;
str:='ljbh='''+str+'''';
tcz.Filter:=str;;//给LJBH赋值,其值由STR提供
tcz.Filtered:=true;
 
LJBH为字段名
 
str:='ljbh='''+str+''''引号正确吗?
 
you could also use OnFielterRecord event
 
能否详细分析一下“引号”的用法,实在是搞不懂。
 
str:=tjue.fieldbyname('dh').asstring;
//因为STR的类型为STRING, 所以假设str='文学'时,
str:='ljbh='''+str+'''';//STR='ljbh=''文学'''
tcz.Filter:=str;;//FILTER:='ljbh=''文学''';
tcz.Filtered:=true;
也许这样的解决办法有点笨,但我只能做到这种程度,请原谅
 
delphi 中是用两个连续的单引号来代替字串中的单引号
如:
filter := 'fieldname1=''aaa'' and fieldname2=''bbb''';
 
如果在字符串中包含'的话,用两个连续的'',不是双引号".
因此showmessage('''asdf''')和showmessage(''''+'asdf'+'''')
是一样的,请自己体会吧
 
filter串中不能包含双引号
使filter生效,执行filtered:=True;
计算字段不能在filter中使用.
例如table:users(usercode char(10),username char(20))
you can:
table1.tablename:='users';
table1.open;
table1.filter:='''张三''';
table1.fitlered:=true;
that's ok

 
不知道·!
 
在Table 的OnFilterRecord事件中写程序
返回ACCEPT是一个条件等/不等式(BOOLEAN),
ACCEPT := DATASET[FIELD1] > DATASET[FIELD2]+50
关于你的问题

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

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属性
 
两个单引号表示一个单引号,在字符串条件中,字符必须用引号括起来
 
多人接受答案了。
 
后退
顶部