此主題討論共計 4 篇文章。
| Jones | 僅瀏覽本文 | 回覆 | 回信 | 轉寄 | |
|---|---|---|---|
| 'VB6 引用 DAO 3.6 做Access2000 .MDB資料庫新增 '說明: 本程式是每隔500ms新增一筆,連續新增20筆記錄到TABLE1表格內, ' 程式及資料庫放在同一個目錄內,開啟本程式兩次,讓兩隻程式同時執行以模擬多人共用! '狀況1:第1次程式,按下Command1開始新增,在尚未新增完畢之前,第2次程式也按下Command1也去新增, ' 此時第2次程式會出現如下的鎖定訊息: ' 錯誤代號3260.無法更新;目前被在機器'mypc'上的使用者'Admin'鎖住 的錯誤訊息! ' 而且當第1次程式新增完畢之後,第2次電腦還是無法再做新增,還是一直會出現上面的鎖定訊息,等了半個小時還是一樣! '狀況2:如果是第1次程式執行完再執行第2次程式,或者是第2次程式執行完再執行第1次程式,則就不會有鎖定的狀況! '請問: 依據狀況2來推斷,應該是執行完就不會再鎖定了,可是為什麼狀況1當第1次程式執行完之後,第2次程式還是無法新增? ' 想問的是鎖定狀態到底何時會釋放? ' 註:有試過將第1次程式的rs.Close就會釋放,但是實務應用上不能將rs關閉掉再開,所以此法不可以使用! '我的實際測試完整程式碼如下: Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Dim db As Database, rs As Recordset '---------------------------------------------------------------- Private Sub Form_Load() Dim mPATH As String mPATH = App.Path If Right(mPATH, 1) <> "\" Then mPATH = mPATH & "\" End If Set db = DBEngine.Workspaces(0).OpenDatabase(mPATH & "MYDB.MDB", False, False) Set rs = db.OpenRecordset("SELECT * FROM [TABLE1]", dbOpenDynaset, dbSeeChanges, dbOptimistic) '使用樂觀鎖定 End Sub '---------------------------------------------------------------- Private Sub Command1_Click() 30 On Error GoTo hErr 31 Dim i As Integer 32 With rs 33 For i = 1 To 20 34 .AddNew 35 .Fields("KNO") = CStr(i) 36 .Fields("PNO") = CStr(Timer) 37 .Update 38 Command1.Caption = i 39 DoEvents 40 Sleep 500 '每隔500ms新增一筆 41 Next 42 End With 43 Exit Sub 44 hErr: 45 MsgBox Err.Number & ".列" & Erl() & "." & Err.Description End Sub '---------------------------------------------------------------- Private Sub Form_Unload(Cancel As Integer) rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub '---------------------------------------------------------------- -- ASPNET News Reader http://tlcheng.twbbs.org/News/Reader.aspx RSS 2.0 http://tlcheng.twbbs.org/News/rss2.aspx?Action=List&Newsgroup=tw.bbs.comp.lang.basic | |||
| 璉璉 | 僅瀏覽本文 | 回覆 | 回信 | 轉寄 | |
| VB5 以後基本上建議用ADO 連資料庫,DAO 不確定對不對,不過我想應該也是一樣... 基本上,Access 每一個 Table 的同時限制是: Select : 255 Insert / Update / Delete : 1 如果你有一個連線卡住沒有 Close ,其它連線是無法更新的。 這在 ADO/ADO.NET 下也是一樣,是 Access 本身的限制。 ==> 本文由 "Jones <someone@microsoft.com>" [系統略除,原始全文請點選瀏覽本文] -- 風禹科技驗證有限公司 ASP.NET Web News Reader 0.2.7 UTF-8 Beta 網站地圖 http://tlcheng.twbbs.org/wwwmap.htm 流域防洪/區域水資源/徐昇網/玫瑰圖/語音通訊 文章與程式 Basic/Fortran/Windows API/.Net/輔助說明檔 原始碼、文章與討論 微軟程式設計、系統管理使用新技術論壇討論區,網友回覆後即時簡訊、電子郵件通知: MSDN: http://forums.microsoft.com/msdn-cht/default.aspx?siteid=14 TechNet: http://forums.microsoft.com/technet-cht/default.aspx?siteid=23 -- ASPNET News Reader http://tlcheng.twbbs.org/News/Reader.aspx RSS 2.0 http://tlcheng.twbbs.org/News/rss2.aspx?Action=List&Newsgroup=tw.bbs.comp.lang.basic | |||
| Jones | 僅瀏覽本文 | 回覆 | 回信 | 轉寄 | |
| 璉璉: 1.我的系統是由VB5時代開始使用DAO,目前系統有將近300個Form,實在無力去改為ADO 2.請問所謂的 "有一個連線卡住沒有Close" 是什麼樣的狀況? 在我POST的程式中,兩個人同時對一個Table做新增,是會有一方會出現鎖定的訊息,這應該是正常現象, 但是當另一方新增完畢之後,應該就解鎖了,另一方就可以再做新增了,不是嗎? 我真的弄不懂它到底是怎樣運作的! ==> 本文由 "璉璉 <devil@tainan.com.tw>" [系統略除,原始全文請點選瀏覽本文] -- ASPNET News Reader http://tlcheng.twbbs.org/News/Reader.aspx RSS 2.0 http://tlcheng.twbbs.org/News/rss2.aspx?Action=List&Newsgroup=tw.bbs.comp.lang.basic | |||
| 璉璉 | 僅瀏覽本文 | 回覆 | 回信 | 轉寄 | |
| DAO/ADO 都屬於 Online 的方式,沒有 Close 都會持續佔用。 ADO.NET 則是設計成 Offline 的方式,只有查詢的瞬間會佔用。 ==> 本文由 "Jones <someone@microsoft.com>" [系統略除,原始全文請點選瀏覽本文] -- 風禹科技驗證有限公司 ASP.NET Web News Reader 0.2.7 UTF-8 Beta 網站地圖 http://tlcheng.twbbs.org/wwwmap.htm 流域防洪/區域水資源/徐昇網/玫瑰圖/語音通訊 文章與程式 Basic/Fortran/Windows API/.Net/輔助說明檔 原始碼、文章與討論 微軟程式設計、系統管理使用新技術論壇討論區,網友回覆後即時簡訊、電子郵件通知: MSDN: http://forums.microsoft.com/msdn-cht/default.aspx?siteid=14 TechNet: http://forums.microsoft.com/technet-cht/default.aspx?siteid=23 -- ASPNET News Reader http://tlcheng.twbbs.org/News/Reader.aspx RSS 2.0 http://tlcheng.twbbs.org/News/rss2.aspx?Action=List&Newsgroup=tw.bbs.comp.lang.basic | |||
.Net 原始碼 | ASP.NET News Reader Beta 0.2.9
2007/06/21 由於微軟新聞伺服器移除多數新聞群組 (newsgroup),目前遭移除之群組暫時改為隱藏純瀏覽,若狀況已定案時,將會將隱藏中的群組重新調整。[討論]