delphi 的共享机制是怎樣的?(100分)

  • 主题发起人 主题发起人 netup
  • 开始时间 开始时间
N

netup

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是access庫,我想實現共享,由於delphi的數被存放到客戶機的緩衝中,所數據被
其它用戶修後,如不刷新立即修改同一筆 數據的話就會出錯,或者多個用戶同時新增了同樣
內容的一 筆記錄的話也會出錯(而這還不是用刷新的方法能解決的),所以本人很請教一下
bed & ado如何實現數據庫應用程序的共享? ado.cursortype如何才能為動態的,如為動態
它能實現被其它用戶修改的數據自動反應到所有正在使用的用戶的界面上嗎?如是這樣,會
不會對程序速度產 生影響? bde為何好像用locktable鎖表,而且幫助上說只能用於dbase
& paradox, access怎麼實現,bed有沒有鎖表,鎖記錄等功能?快幫我啦,我快不行了,
delphi開發多用戶程式有甚麼好方法,請指點指點才是........急救! !!!
我想知道為何我不可以在錯誤出現之前就事先做出決定,如可以,我如何在用戶修改或
刪除之前得到表的鎖定信息,這樣我便可以相應做處理, 可我在posterror, editerror,
deleteerror等事件中的代碼都在系統錯誤之後發生,而且我也不知道如何識別表當前的
鎖定狀態.有辦法嗎?我不想有系統錯誤出現,如表被其他用戶修改, 我想在用戶操作時就
能做出能否操作的決定.可以嗎? 回答我好嗎?????


 
用事务不可以吗?
 
我想明白機制,並就此解決.難道我們就不能在出錯前做出識別出錯誤並相應處理嗎?
我很想這樣.請各位指點,我初來大富翁,請多幫幫,因為我錢不多.....
 
access本身实现共享比较麻烦,直接用bde不能实现共享,你可以从ODBC转一下兴许会好,
我曾用Access做过三层结构程序,直接用bde不能实现共享,后来我就用了ODBC就好了!
 
有人可正面回答嗎?我實在是解決不了,用事務行嗎?
如果其它用戶刪除或修改了主鍵值(ado的刷新好像一定要有索引),你怎麼看到其它用戶
修改后的數據?(refresh or [close and open])refresh肯定不行,但也不能叫我不斷的
[close and open]吧?而且ado的數據不有延時問題,不知是不是borland未封裝好.數據被
修改后,你總是要過一下刷新才能看到,不知大家是否遇到過.(我升過級了;)
 
現在我就是真對ADO在多用戶時提出的問題,怎麼解決嘛?
 
我觉得这个应该主要是access的问题
access本质上是一个文件型数据库,因此它并不是很适合做多同户环境下的数据库,
也不支持事务。但是access确实可以做小型应用下的共享数据库。
我试过,多个用户通过Jet引擎访问access0000数据库,Jet会自动处理锁定,而且是
行锁定,但是锁定方式是悲观的,当某个用户编辑一条记录时,其它用户无法访问这
条记录,当然也就不会出现多个用户同时修改一条记录的情况。但据说ADO不会处理
这种情况。
ADO在recordset.Open的时候,可以选择CursorType和LockType参数,前者指定使用的
游标类型,后者指定使用的锁定类型。CursorType的几个选项如下:

常量 说明
AdOpenForwardOnly 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游
标相同。当只需要在记录集中单向移动时,使用它可提高性能。
AdOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无
法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更
改的数据。
AdOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录
集中进行所有类型的移动,但不包括提供者不支持的书签操作。
AdOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,
对其他用户所作的添加、更改或删除不可见。

但是,ADO并不能保证使用的数据库支持所有的类型。如果设置了不支持的值,不会
导致错误,将使用最接近支持的 CursorType,这样可能导致你的程序出错。

我给你建议有两条:一是改用JET直接访问access,在Delphi下可以使用Diamond Access
控件,它封装了Jet/DAO对象。我想DAO中肯定有处理锁定的方法。二是放弃access,
改用Sql server、Interbase之类的sql数据库,这是比较彻底的解决办法。
 
看來也沒有更好的辦法了,這樣吧,我就暫時結束此問題吧?但不知左兄(本人也是湖南的)
有沒有遇到用ado時有延時現象,我在大富翁發過貼,但無人問津,就是有,也是說了根沒說一樣.
不知左兄有何高見,可有時間看看貼子,sql 2000上我也有試過,同樣有這樣的問題.
 
后退
顶部