好难!!!如何对TADOTable进行过滤?(200分)

  • 主题发起人 主题发起人 ymkj
  • 开始时间 开始时间
Y

ymkj

Unregistered / Unconfirmed
GUEST, unregistred user!
一个表里有str1,str2,date1,date2,int1,int2;

过滤条件为:
date1>=strtodate(maskedit1.text)
and date1<=strtodate(maskedit2.text)
and str1=trim(edit1.text)
and str2=trim(edit2.text)
and int1>=strtoint(edit1.text)
and int2<=strtoint(edit2.text);

上边这样的过滤条件在的delphi6下TADOAable中如何实现?
 
使用SQL实现数据过滤(不必用Ttable组件)

用一条很简单的SQL语句就能实现:

SELECT *FROM str1,str2,date1,date2,int1,int2
where date1>=strtodate(maskedit1.text)
and date1<=strtodate(maskedit2.text)
and str1=trim(edit1.text)
and str2=trim(edit2.text)
and int1>=strtoint(edit1.text)
and int2<=strtoint(edit2.text);

 
 
同意 HunterTeam 的方法
 
你也可以设置table或query的
filter属性
filter:='date1>=strtodate(maskedit1.text)
and date1<=strtodate(maskedit2.text)
and str1=trim(edit1.text)
and str2=trim(edit2.text)
and int1>=strtoint(edit1.text)
and int2<=strtoint(edit2.text)';
filetered:=true;
 
sql语句和设置过滤条件都行
SELECT *FROM str1,str2,date1,date2,int1,int2
where date1>='''+maskedit1.text+'''
and date1<='''+ maskedit2.text+'''
and str1='''+trim(edit1.text)+'''
and str2='''+trim(edit2.text)+'''
and int1>='''+edit1.text+''''
and int2<='''+edit2.text+''';
比较时注意用数据库函数转换类型,注意在该语句=后面都是string型,转换相应的int,date型即可,
例:oracle用to_date,to_number函数
 
在AdoTable的OnFilterRecord事件里设置过滤条件。
Accept:=date1>=strtodate(maskedit1.text)
and date1<=strtodate(maskedit2.text)
and str1=trim(edit1.text)
and str2=trim(edit2.text)
and int1>=strtoint(edit1.text)
and int2<=strtoint(edit2.text);
当然,过滤时还要把filtered设为true。
 
[:(]点击按钮后如何触发OnFilterRecord事件
 
这有什么难的,是你太菜了吧?
 
看来是的,很菜,那你能帮我做到吗?
 
怎么没有回应了,求助!!
 
OnFilterRecord事件在数据集打开时自动触发
 
学习,觉得sql好用
 
把table的Filtered属性设为True在就会触发OnFilterRecord事件了
 
都说得这么明白了,你还不会呀!
 
同意 rainM[:D][:D][:D][:D][:)][8D][:(][:(]
 
你要是改用ADOQUERY会更好一些,我深有体会。
不论是执行效率还是实现方法都要好。
 
不好意思我不会用ADOQUERY,再一个我个人觉得ADOTABLE比效容易理解,
所以我用ADOTABLE。
现问题已经实现,源码如下,希望能对有相关问题的人一点帮助:
//过滤条件
procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if (ADOTable1d1.Value >= strtodate(maskedit1.Text))
and (ADOTable1d1.Value <= strtodate(maskedit2.Text))
and (ADOTable1c1.Value >= strtocurr(edit1.Text))
and (ADOTable1c1.Value <= strtocurr(edit2.Text))
then
accept:=true
else accept:=false;
end;

//查询按钮
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ADOTable1.Active:=false;
ADOTable1.Active:=true;
ADOTable1.Filtered := True;
end;

最后多谢各位帮助!!
 
多人接受答案了。
 
后退
顶部