主从表不能同时缓存更新(100分)

  • 主题发起人 主题发起人 Lidong
  • 开始时间 开始时间
L

Lidong

Unregistered / Unconfirmed
GUEST, unregistred user!
主从表更新不好控制。所以不设置主从关系,而是在主表的AFTERSCROLL事件中,将参数传给从表,并关闭和打开从表。
1、用两tquery,两个Tupdatesql来处理数据,querymaster(主表)和querydetail(从表)的cachedupdate均设为true
2、在从表中,写一个带参数的SQL,但不指定DATASOURCE。
SELECT * FROM DETAILTABLE WHERE MASTERID=:MASTERID
3、在主表的AFTERSCROLL中,给从表单指定参数
QUERYDETAIL.PARAMBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
QUERYDETAIL.ACTIVE:=FALSE;
QUERYDETAIL.ACTIVE:=TRUE;
4、在从表的ONNEWRECORD中,
QUERYDETAIL.FIELDBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
这是为新增记录考虑的。
5、以后,您就可以正常对主、从表中运用APPLYUPDATES。
6、运行时,先querymaster.insert,然后在主表和从表写入数据,然后:
Database1->StartTransaction();
try
{ Query1->ApplyUpdates();
Query2->ApplyUpdates(); // try to write the updates to the database
Database1->Commit(); // on success, commit the changes;
}
catch (...)
{
Database1->Rollback(); // on failure, undo the changes
throw; // throw the exception to prevent a call to CommitUpdates!
}
Query1->CommitUpdates();
Query2->CommitUpdates(); // on success, clear the cache
--------------------------------------------------------------------------------
可是,执行到"Database1->Commit()"时死掉,如果使用两个事物分别对主从表提交时则正确,
但是我想用一个事物完成两个表的提交,该怎样做?
我用的是Pwin98SE+CB5+SQL6.5
 
Query1->ApplyUpdates(); // 怎么没有参数也可以的?
 
不會吧﹐我喜歡用UPDATESQL,在我做的系統中﹐每個模塊都有一個主檔﹐一到兩個
從檔﹐一到兩個累計檔﹐而我抓取出來供顯示和修改的數據又涉及到其他多個相關
的TABLE,我采用UPDATESQL,在龐大的左連接構成的數據中更新我需要的欄位﹐我的
主從檔是有關連的﹐沒有一點問題
你的出錯信息是什么﹐如果你的TABLE間有FOREIGNKEY當然提交時應該有個先后順序
的啦
 
to wlq:
能将你的方法详细说明吗,最好给出代码,谢谢!
 
發了一個過去﹐剛剛調通的﹐是一個生產管理系統的一個小模塊﹐輔助成品掃描繳庫用的﹐
因為不知道流程﹐你將難以看懂﹐你可以集中看看我是怎樣處理主從檔和累計檔以及我的
updatesql的使用﹐希望對你有所幫助
 
to wlq:
收到,但是附件无法打开,请重发一遍好吗,谢谢!
 
指名从表的DataSource才能一次更新
或用UpdateSQL
 
又發了一遍﹐如再收不到請來信告知
 
主从表有什么不好控制的,你可以用SQL语句来实现的
beforedelete事件在DELETE主键前判断一下,如果该主键在从表中使用就不删除了,
然后在插入前beforeinsert判断一下,如果没有该主键直接不插入不就得了,
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
775
import
I
后退
顶部