紧急求数据集过滤的方法!(50分)

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

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
现有主从两表.
主表如下:
编号 姓名 组别
001 张三 A001,A002,A003
002 李四 A008,A003
从表如下:
组别 名称
A002 t1
A003 t2
A004 t3
A008 t7
我现在的要求是当数据集滚动时筛选从表中组别包含于主表组别的数据
即:
点击001这一笔数据时.从表显示数据为:
组别 名称
A002 t1
A003 t2
点击002这一数据时,从表显示数据为:
组别 名称
A003 t2
A008 t7
请问怎样写才好?
 
H

hfghfghfg

Unregistered / Unconfirmed
GUEST, unregistred user!
where in
或 where like
 
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
我是对从表数据集本身进行过滤,即:ADOQuery1.Filter而不是从后台数据再查询一次的!
我刚才用了LIKE语句这样写也不行,望各位指点一下:
qryDetail.Filted:=false;
qryDetail.Filter:='group like '%''+qryMaster.fieldbyname('group).text+''%'';
qryDetail.Filted:=true;
在运行时,报错
 
H

hfghfghfg

Unregistered / Unconfirmed
GUEST, unregistred user!
--create table [主]([编号] varchar(10), [姓名] varchar(10), [组别] varchar(100) )
create table [从]([组别] varchar(10), [名称] varchar(10))
insert into [从] values ( 'A002' , 't1')
insert into [从] values ( 'A003' , 't2')
insert into [从] values ( 'A004' , 't3')
insert into [从] values ( 'A008' , 't7')
select * from [从] where charindex( [组别] ,'A008,A003')>0
select * from [从] where 'A008,A003' like '%'+[组别]+'%'
drop table [从]

--drop table [主]
 
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢楼上hfghfghfg的热情回复,可能你没有明白我的意思!
因为主从两表的数据我已经在窗体初始化时全部打开,我在界面操作时,无需再从后台数据根据条件再查询一次,这样会耗用很多时间,因为数据全部都在数据集里面了,我只需从表数据集中的过滤即可.
 
H

hfghfghfg

Unregistered / Unconfirmed
GUEST, unregistred user!
Filter 的化
用 onFilterRecord事件
procedure TForm1.ADOQuery1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin

end;
 
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
在这个FilterRecord事件里
qryDetail.Filter:='group like '%''+qryMaster.fieldbyname('group).text+''%'';
这样写行不?
 
H

hfghfghfg

Unregistered / Unconfirmed
GUEST, unregistred user!
不是 这么用 的
Accept :=pos('','') >0l
The following example shows how to use a field comparison when filtering records by using the OnFilterRecord event.
procedure TForm1.DataSetFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := DataSet['AmountOfPurchase'] > StrToInt(Edit1.Text);
end;
 
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
好的,谢谢,我去试一下!
 
S

sdhxdjw

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.ADODataSet1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=Pos(','+adodataset2.fieldbyname('组别').asstring,','+ADODataSet1.FieldByName('组别').AsString)>0;
end;

用语句生效:
ADODataSet1.Filtered:=true;
 
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢各位的帮助,问题我已经解决,散分!
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部