看来这是BDE缓冲处理机制的问题,
先想个法子规避吧,
以你的第二个例子为例,再建一个TDATABASE,连接同一个数据库当然,DATABASENAME要不同
你的执行UPDATE语句的QUERY的DATABASENAME设为该值,
应该可以达到目的了,
这回我是试过了
当然,只到这一步还不够,因为你的第一个Query还没有更新, 老是close open也不是个办法
我是这样想的,希望对你有用
因为要改很大的表,一般此时为了性能考虑只宜一个事务改一条记录,
首先 query+updatesql标准组合是一个可更新的数据集,用于查询,修改,显示,记住不要做
applyupdates!!!!
再建一个TDATABASE,假设为DATABASENAME为'REALMODIFY'
然后在一个合适的时候,你可能修改了一条记录确认要写回数据库,比如是在afterpost事件中
tquery 有一个属性UpdateStatus,指明当前记录状态,是未改还是已修改或新增什么的
假设为usUnmodified,那么,
updatesql1.Query[ukModify].DatabaseName:='REALMODIFY';
UpdateSQL1.Apply(ukModify);
应该可以了,其它一些事务控制异常控制的细节你就自己想吧,
如果希望QUERY中的记录标志回复为'未修改',只调用commitupdates
(不过好象老是执行两次不知道为什么但至少快几个数量级了,呵呵)
打这多么字真累,有什么新的发现告诉大伙啊