主从表的刷新问题(100)

  • 主题发起人 主题发起人 paddy2007
  • 开始时间 开始时间
P

paddy2007

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题如下: 我的主窗体上有2个dbgrid,分别对应2个qry,一个显示主表记录,另一个显示主表下每一条记录对应的附表记录.用单号字段做外键关联的.鼠标点击主表记录,附表会显示对应关联的附表记录. 我的qryzhu的afterstroll事件下有代码:var sqlstr :string;begin try qryNowOrderClothes.Connection := DBConnect; qryNowOrderClothes.SQL.Clear; qryNowOrderClothes.Close; try sqlstr := 'select * from vNowClothesInfoShow where OrderNum = '+quotedstr(qrynoworder.fieldbyname('洗衣单号').AsString)+' order by DressNum'; qryNowOrderClothes.SQL.Text := sqlstr; qryNowOrderClothes.Open; except end; finally end;end;问题是,我一运行程序,主表记录集就打开,附表就跟着主表的所有记录筛了一遍附表.导致死机10秒的样子.数据越多越慢.我怎么能够在一开始qryzhu.open的时候切断主从表的联动呢?
 
搞个timer,程序启动后再打开记录集
 
放在DataSource控件中OnDataChange事件中
 
1、延时打开,显示正在打开的对话框2、改进SQL,缩短执行时间
 
三位的回答我都不能采纳,我做的是洗衣店的管理系统.主表是未结衣单表,附表是未结衣服表.一个衣单包含若干衣物.就是这样的主从关系.洗衣店目前每天有百来个单子要录取和结单.我的意思是,每建每结一个单,主从表的信息就要刷新的,这时附表跟着主表滚了一遍.要10秒的样子.这在实际中无法忍受啊.
 
你是每建每结一个单,主从表的信息就要刷新的,这时附表跟着主表滚了一遍,其实这个地方用触发器是很好处理的,你在你的主表和附表之间设置个触发器,只要主表插入或者是更新,附表就可以用触发器来触发需要的操作,操作完成后,刷新主,附表;你这个地方不需要在界面来处理。
 
可以这样,在主表数据集open之前将afterscroll指向nil,在open完成之后再向afterscroll赋值,最后主表数据集first一下,以显示第一条记录的子记录
 
如舞雪所说!
 
两个问题先问一下:1、你的两个表有多少条记录???10秒种至少能读几千条记录了吧。2、你的从表有没有建外键???如果没键,绝对会慢,如果建了,象你说的情况,应该不会发生。按照我们的习惯,不会用这种方法,直接在从表的ADO语句中写“select * from vNowClothesInfoShow where OrderNum = :OrderNum order by DressNum”将从表的ADO指到主表的ADO上,没有感觉慢过。我们主表有几万条记录,从表有40多万条记录。服务器是2个超线程至强CPU,4G内存,win2000+sql server2000。顶多一两秒就打开了。
 
to zbdzjx:你能不能把设计到的事件的代码贴出来呢,谢谢!
 
条件字段加索引,主键必须有索引,外键不外键都可以
 
回楼上的,外键最好建索引,在oracle下,不建索引会导致全表扫描,在sql server下不知道,但估计也一样,至少个人感觉建索引肯定会好一些。回楼主:1、主表:adoquery1和datasource1,adoquery1的sql语句为:select dh,rq from 主表(dh主键)。2、从表:adoquery2和datasource2,adoquery2的sql语句为:select id,dh,mx from 从表 where dh=:dh order by id (id主键,dh外键)。从表的adoquery2的datasource属性选择成datasource1就可以了。
 
后退
顶部