AdoQuery 会记住上一次用的参数吗???请高手帮忙

hr168 2005-01-20 12:03:30
有2个AdoQuery和2个DataSource ,
DataSource1.Dataset:=Adoquery1,
DataSource2.Dataset:=Adoquery2,
Adoquery1和Adoquery2是主从关系,那么
Adoquery2.DataSource=DataSource1

当A表与B表关联于F1字段的时候,那么

adoquery1.sql.text:='select * from A'
把adoquery1先打开

分别放2个按钮
第一个按钮里写
adoquery2.close;
adoquery2.sql.text:='select * from B';
adoquery2.open;
第二个按钮里写
adoquery2.close;
adoquery2.sql.text:='select * from B where F1=:F1';
adoquery2.open;

为什么先点了第二个按钮选出的记录集合和点第一个按钮选出的集合是完全一样的
事实上应该选出不一样的记录集合啊.


如A表中有
F1 F2 F3
1 y y
2 y y
B表中有
F1 E2 E2
1 p p
1 p2 p2
2 p3 p3

当主表选择了第一条记录的时候
如果先点第2个按钮得到的从表为
F1 E2 E3
1 p p
1 p2 p2
这个时候点第1个按钮本应该得到3条B表中的记录,可是却和
按钮2的结果一样


...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xindijingying 2005-01-21
  • 打赏
  • 举报
回复
hr168(Ocb.Hr) :
DataSet.MasterFields:='';
有效么?我也试试,我也遇到过类似的问题。谢了~!
hr168 2005-01-21
  • 打赏
  • 举报
回复
我都试了不管用,我跟到adodb的源码里发现原来是它本身的bug,在procedure InitializeMasterFields(Dataset: TCustomADODataset);过程里改一下
with DataSet do
Begin
{ Assign MasterFields from parameters as needed by the MasterDataLink }
if (Parameters.Count > 0) and Assigned(MasterDataLink.DataSource) and
Assigned(MasterDataLink.DataSource.DataSet) then
begin
for I := 0 to Parameters.Count - 1 do
if (Parameters[I].Direction in [pdInput, pdInputOutput]) and
(MasterDataLink.DataSource.DataSet.FindField(Parameters[I].Name) <> nil) then
MasterFieldList := MasterFieldList + Parameters[I].Name + ';';
MasterFields := Copy(MasterFieldList, 1, Length(MasterFieldList)-1);
SetParamsFromCursor;
end
else
// Edited By Hr
DataSet.MasterFields:='';
// 2005-01-20

End;
DG_1 2005-01-20
  • 打赏
  • 举报
回复
就是加个
adoquery2.sql.clear;
试试
DG_1 2005-01-20
  • 打赏
  • 举报
回复
不太明白...
分别放2个按钮
第一个按钮里写
adoquery2.close;
adoquery2.sql.clear;
adoquery2.sql.text:='select * from B';
adoquery2.open;
第二个按钮里写
adoquery2.close;
adoquery2.sql.clear;
adoquery2.sql.text:='select * from B where F1=:F1';
试试
adoquery2.open;
hr168 2005-01-20
  • 打赏
  • 举报
回复
晕,我不是联不来主从表,我现在用的是d6打了补丁,问题你没有明白我的意思吗
Sorder 2005-01-20
  • 打赏
  • 举报
回复
看你点过去点过来的,如果要正确实现主从表的关系
这样就行了
第一个按钮里写
adoquery1.close;
adoquery2.close;
adoquery2.sql.text:='select * from B where F1=:F1';
adoquery2.open;

adoquery1.sql.text:='select * from B';
adoquery1.open;
主表记录显示在dbgrid1中
从表数据显示在dbgrid2中
这个时候dbgrid2中的记录会随着你点击dbgid1的记录的改变而改变

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧