当前位置:主页>销售管理软件> 列表

菜鸟难题,请高手解决,三个数据库连动 找会计电算化软件下载

仓库管理软件版1楼: 有adods1,adods2,adods3。
adods2根据adods1的当前记录搜出记录,adods3根据adods2的当前记录搜出记录。
adods1变引发adods2变引发adods3变,adods2变引发adods3变。
两段代码:
代码一:
{adods2.Close;
adods2.parameters[0].value := adods1.FieldByName(''ID'').asString;
adods2.Open;}
代码二:
{adods3.Close;
adods3.parameters[0].value := adods2.FieldByName(''ID'').asString;
adods3.Open;}
请教高手,这两段代码放在什么事件里?

2楼: afteropen 如会计电算化软件下载

3楼: 如果放在afteropen中,在dgGrid中改变选择记录时不能更新子表。

4楼: 更新子表:这个在设计数据库中的数据表的时候,合理建立索引,优化各个表之间的索引就能作到更新子表的。
我觉得设计表之间的索引、结构往往在编程的时候,要省却好多的麻烦之后。
这一点很重要!

5楼: to listhano:
你说的是用主从表?
数据库中(Access)我已经建立关联关系了,但用我写的带参数的SQL语句的方法,在实际显示中从表的Grid就是不随主表变啊。

6楼: 某一高手教导我:只有菜鸟才用Delphi的主从表,实际做都是用带参数的SQL语句(不用取从表的所有数据嘛)。我也不满足只做菜鸟.....

仓库管理软件版7楼: 请将上述两段代码分别放在AdoQuery1和AdoQuery2的AfterScroll事件中.

我一般是下面的下法,请参考:
procedure TFmMain.QyMasterAfterScroll(DataSet: TDataSet);
var
vKey: String ;
begin
vKey := QyMaster.FieldByName(''No'').AsString ;
QyDetail1.Close;
QyDetail1.SQL.Clear;
QyDetail1.SQL.Add(''select * from Detail1 where No =:No'');
QyDetail1.ParamByName(''No'').AsString := vKey ;
QyDetail1.Open;
end;

procedure TFmMain.QyDetail1AfterScroll(DataSet: TDataSet);
var
vKey: String ;
begin
vKey := QyDetail1.FieldByName(''Nos'').AsString ;
QyDetail2.Close;
QyDetail2.SQL.Clear;
QyDetail2.SQL.Add(''select * from Detail2 where No =:Nos'');
QyDetail2.ParamByName(''Nos'').AsString := vKey ;
QyDetail2.Open;
end;

8楼: to zxy666666:
如果放在afterscroll,不知你有没有注意到在adods2打开的过程中,好象是向adods2中填充一条记录就执行一次adods2的Aferscroll事件,很多多余操作啊。