最近用ACCESS做客户端数据管理的东东。发现一个问题,数据更新比较慢(JET的PAGETIMEOUT默认为5秒),影响了使用。比如插入、修改、删除数据时,相应操作更新较慢。
其中一个操作这样操作的:
取得表中当前一条记录,进行相关处理,处理完毕后删除此记录。因为在线程中用的是循环(执行删除后,重新取记录再处理),结果造成因为删除不及时,同一记录又被处理了多遍,直至此记录删除完毕。一般一条记录要重复处理5、6次。
不知道这个PAGETIMEOUT在那里设置,还有没有更好的文件型数据库,如果自己写操作文件或XML文件也太麻烦了。
其中一个操作这样操作的:
取得表中当前一条记录,进行相关处理,处理完毕后删除此记录。因为在线程中用的是循环(执行删除后,重新取记录再处理),结果造成因为删除不及时,同一记录又被处理了多遍,直至此记录删除完毕。一般一条记录要重复处理5、6次。
不知道这个PAGETIMEOUT在那里设置,还有没有更好的文件型数据库,如果自己写操作文件或XML文件也太麻烦了。
线程中的循环是按顺序执行的,处理完一个步骤才能进行下一个步骤。
过程:
取记录—>删除当前记录—>处理—>再取记录—>再次删除新记录—>处理。
如此循环。
其实,你可以写个循环来查看。
取记录—>删除当前记录—>查看此记录是否存在,反馈信息—>取新记录—>....(循环)
这是你会发现,反馈的信息是已经删除,但是会反馈多次已经删除了。其实关键是,我在循环开始的时候的查询是没写条件的,比如ID,只是写成了Select * from TableName。而在查看记录是否存在是的查询是写条件的,条件就是记录的ID。这是会发现不加条件的查询仍能查到记录,而加条件的查询就是记录为空了。
比如:表中就一条数据,执行上述的操作。就会发现不加条件的仍能查到记录,而加条件的就查不到了。奇怪呀。现在我都是保存上一记录的ID,执行循环头次查询的时候加条件>ID来解决的。代码:Threadvar
TmpQuery1,TmpQUery2:TADOQuery;Thread.Execute while not Terminated do
begin
select * from Table
open(获取ID)
delete from Table where id=获取的ID
View 获取的ID
end;这是你会发现多次VIEW相同的ID信息
晕呀,耽误我半天的时间。