最近用ACCESS做客户端数据管理的东东。发现一个问题,数据更新比较慢(JET的PAGETIMEOUT默认为5秒),影响了使用。比如插入、修改、删除数据时,相应操作更新较慢。
其中一个操作这样操作的:
  取得表中当前一条记录,进行相关处理,处理完毕后删除此记录。因为在线程中用的是循环(执行删除后,重新取记录再处理),结果造成因为删除不及时,同一记录又被处理了多遍,直至此记录删除完毕。一般一条记录要重复处理5、6次。
  不知道这个PAGETIMEOUT在那里设置,还有没有更好的文件型数据库,如果自己写操作文件或XML文件也太麻烦了。

解决方案 »

  1.   

    与PageTimeOut无关的吧?你在循环中执行操作的时候稍微delay一下看看,可能是因为你的操作过快,数据库还没有完成上一个操作的时候下一个操作又来了。
      

  2.   

    我是先执行删除操作,在进行处理。按正常来说,肯定是没问题的。
    线程中的循环是按顺序执行的,处理完一个步骤才能进行下一个步骤。
    过程:
        取记录—>删除当前记录—>处理—>再取记录—>再次删除新记录—>处理。
    如此循环。
    其实,你可以写个循环来查看。
        取记录—>删除当前记录—>查看此记录是否存在,反馈信息—>取新记录—>....(循环)
    这是你会发现,反馈的信息是已经删除,但是会反馈多次已经删除了。其实关键是,我在循环开始的时候的查询是没写条件的,比如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信息
      

  3.   

    问题解决,关键是我在执行删除的时候用了另一个会话的TADOQuery,就是上面的TmpQuery2来执行。这个数据的同步正好是5秒,就是PageTimeOut的默认时间。
    晕呀,耽误我半天的时间。