在多线程下访问本地ACCESS数据库,当用adodataset在多个线程同时修改同一表的时候,例如:
有2个线程同时打开一张表,都不定时修改里面的某个字段的内容,方法是adodataset.edit ...adodataset.post此时出现的情况:
当设置adodataset的ursorLocation :=clUseClient;CursorType:=ctKeyset;有时候出现“法为更新行集定位:一些值可能已在最后读取后已更改”
当设置adodataset的ursorLocation :=clUseServer;CursorType:=ctKeyset;则不出现错误以上提示。请问ursorLocation :=clUseClient和ursorLocation :=clUseServer有何区别?
有2个线程同时打开一张表,都不定时修改里面的某个字段的内容,方法是adodataset.edit ...adodataset.post此时出现的情况:
当设置adodataset的ursorLocation :=clUseClient;CursorType:=ctKeyset;有时候出现“法为更新行集定位:一些值可能已在最后读取后已更改”
当设置adodataset的ursorLocation :=clUseServer;CursorType:=ctKeyset;则不出现错误以上提示。请问ursorLocation :=clUseClient和ursorLocation :=clUseServer有何区别?
原始记录应该是李维的<<实战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是萬能的良葯.
不过李维写这些的时候差不多是十年前了。现在的普通PC已经堪比当时的服务器