O
oceanwave
Unregistered / Unconfirmed
GUEST, unregistred user!
环境:
DELPHI6+ADO+ACCESS2000
数据库:
主表 Master
主表字段 MID
明细表 Detail
明细表字段 MID,DID
试验程序控件安排
用TADODataSet连接主表和明细表(按李维书上所示方法连接主/明细表)。
方案一:
普通模式(不打开缓存更新模式)
在主表的BeforePost中打开事务管理:
connection.BeginTrans;
在主表的AfterPost中提交事务:
connection.CommitTrans;
在主表的PostError中回滚事务:
connection.RollbackTrans;
方案二
缓存更新模式(将主表、明细表的LockType设为ltBatchOptimistic)
更改主表的AfterPost事件为
dsMaster.UpdateBatch();
dsDetail.UpdateBatch();
Connection.CommitTrans;
方案三
打上述的数据的提交过程写以一个提交的按钮事件中:
Connection.BeginTran;
try
dsMaster.UpdateBatch();
dsDetail.UpdateBatch();
Connection.CommitTrans;
except
Connection.RollbackTrans;
end;
应该说来该设置也设置,也老老实实按李维书中写的做了,但问题出现了:
问题:
1.当主表在新增状态下, 明细只会显示一个记录(明细用TDBGrid来显示),在提交后才会
全部显示出来(但前提是不采用CacheUpdate模式).
2.如上题,在CacheUpdate模式下,主表的数据提交了,但明细表的UpdateBatch并未提交
数据。
如果不采用缓存更新方式,且在数据库定义了主表与明细表的级联关系,则提交时就会
出现主表对应记录不存在的错误提示。但如果在数据库不定义这些关系,而在程序中用代
码来维护这些关系,问题就不会出现。只是代码量多了。(这就解决了第二个问题)
其实最重要的是第一个问题,大不了我不用缓存更新方式,自己用代码来维护主明细表关
系。但直接与数据库互动在单机环境下还适用,但在多层网络架构的系统中,就会增加
网络的负担,当然要用缓存更新方式。
所以,这两个问题各150分!
请各位大侠赐教!!
DELPHI6+ADO+ACCESS2000
数据库:
主表 Master
主表字段 MID
明细表 Detail
明细表字段 MID,DID
试验程序控件安排
用TADODataSet连接主表和明细表(按李维书上所示方法连接主/明细表)。
方案一:
普通模式(不打开缓存更新模式)
在主表的BeforePost中打开事务管理:
connection.BeginTrans;
在主表的AfterPost中提交事务:
connection.CommitTrans;
在主表的PostError中回滚事务:
connection.RollbackTrans;
方案二
缓存更新模式(将主表、明细表的LockType设为ltBatchOptimistic)
更改主表的AfterPost事件为
dsMaster.UpdateBatch();
dsDetail.UpdateBatch();
Connection.CommitTrans;
方案三
打上述的数据的提交过程写以一个提交的按钮事件中:
Connection.BeginTran;
try
dsMaster.UpdateBatch();
dsDetail.UpdateBatch();
Connection.CommitTrans;
except
Connection.RollbackTrans;
end;
应该说来该设置也设置,也老老实实按李维书中写的做了,但问题出现了:
问题:
1.当主表在新增状态下, 明细只会显示一个记录(明细用TDBGrid来显示),在提交后才会
全部显示出来(但前提是不采用CacheUpdate模式).
2.如上题,在CacheUpdate模式下,主表的数据提交了,但明细表的UpdateBatch并未提交
数据。
如果不采用缓存更新方式,且在数据库定义了主表与明细表的级联关系,则提交时就会
出现主表对应记录不存在的错误提示。但如果在数据库不定义这些关系,而在程序中用代
码来维护这些关系,问题就不会出现。只是代码量多了。(这就解决了第二个问题)
其实最重要的是第一个问题,大不了我不用缓存更新方式,自己用代码来维护主明细表关
系。但直接与数据库互动在单机环境下还适用,但在多层网络架构的系统中,就会增加
网络的负担,当然要用缓存更新方式。
所以,这两个问题各150分!
请各位大侠赐教!!