在多线程下访问本地ACCESS数据库,当用adodataset在多个线程同时修改同一表的时候,例如:
有2个线程同时打开一张表,都不定时修改里面的某个字段的内容,方法是adodataset.edit ...adodataset.post此时出现的情况:
当设置adodataset的ursorLocation :=clUseClient;CursorType:=ctKeyset;有时候出现“法为更新行集定位:一些值可能已在最后读取后已更改”
当设置adodataset的ursorLocation :=clUseServer;CursorType:=ctKeyset;则不出现错误以上提示。请问ursorLocation :=clUseClient和ursorLocation :=clUseServer有何区别?

解决方案 »

  1.   

    以下应该可以解答楼主问题,来源有点复杂,是以前大富翁论坛上的。
    原始记录应该是李维的<<实战delphi5.x ado/mts/com+....>>,现在都很难下载到,我手头也木有。。==============================================
     CursorLocation设置是基於李維的書<<實戰delphi5.x ado/mts/com+....>>
    現彔原話如下:
     Ado的cursorlocation分為兩類,一種是用戶端的Cursorlocation,另外一種便是位於伺
    服端的cursorlocation,那什懡是cursorlocation?簡單的說就是當用戶端應用程式存取
    了一些資料後,這些資料是暫時存在什懡地方? 如果這些暫時儲存的資料是儲存在用戶端
    的ado驅動程式記憶體當中,由用戶端的ado引擎管理的話,那懡就稱為用戶端的cursor,
    相反的,如果這些暫時儲存的資料是儲存在後端的資料庫當中,由資料庫本身管理的話,
    那懡就稱為伺服端cursor...
       基本上client-side cursor在用戶端需要比較多的記億體,但會啟動比較少的網路
    roudtrip,而且對如資料來源伺服器負荷較輕.由於目前一般來說用戶端的機器都有足
    夠多的記記體因此只要程式師謹慎的使用,會讓程式執行的非常有效率.如果再搭配適當
    的cache size特性值的設定以及client-size cursor的話,那懡不管是主從架構或是
    internet/inteanet,電子商務應用系統都是合適的用法.
       server-side cursor對於來源伺服器的能力來說是一個非常嚴格的考驗......
    基本上如果沒有特別的理由,我並不建議程式師使用,千萬不要人云亦云,以為server_size
    cursor是萬能的良葯.
      

  2.   

    大概的意思是ursorLocation :=clUseServer时,会自动处理同时修改的问题。但对服务器的要求比较高。
    不过李维写这些的时候差不多是十年前了。现在的普通PC已经堪比当时的服务器
      

  3.   

    多线程,Access?我怎么觉得有点晕呢
      

  4.   

    往ACCESS写或修改了数据,要隔几秒才能查得出来的,我一般不用ADO.EDIT和ADO.POST,用SQL语句,这样就没有你所说的情况发生了
      

  5.   

    直接运行相关的SQL语句如何?