最近做了一個案子,不復雜。
在VS2012 環境下,創建一個VB.net視窗程式,讀取外部硬體的資料,然后寫入Access資料庫。
后續就是常規的增刪改查操作了
×××
資料庫只有一個用戶,就是VB,net 創建出來的程式。 這個程式后續簡稱為A程式。
這個A程式,里面的對資料庫的操作 是線性的,正常作業后,只有一個執行緒操作 Access資料庫
在這中情況下,還是出現了access 資料庫的無法更新 目前已被鎖定。
×××
谷歌一下,發現好多人都遇到這個情況, 還有人總結了原因
1)多個用戶并發訪問
2)連接Access資料庫出現"無法更新,當前被鎖定"的問題
我是在使用executeBatch的時候出現這個問題的,且在例外處理中也關閉了Connection和Statement物件.
經檢查發現原因在于出現例外時沒有回滾.
在catch代碼塊中加入 con.rollback()即可.
3)(https://www.thinbug.com/q/38385621)
我嘗試過的并沒有阻止錯誤的事情:
每次插入后關閉連接。 (除了不解決問題之外,這也導致執行時間的急劇增加。)
檢測到錯誤并嘗試恢復時關閉所有連接。
CursorTypes的每個排列。
替換SQL Execute的ADODB RecordSet Update方法(INSERT INTO ...)。
將Access 2003資料庫轉換為Access 2013并將Jet 4.0切換為Jet Ace 12。
為資料庫創建前端。 (資料庫通常駐留在沒有前端的網路共享上。)
將資料庫移至C:。 (我已經讀過資料庫的長路徑會產生錯誤。)
更改Access中的客戶端設定以執行基于行的鎖定并將所有鎖定更改為無鎖定到已編輯的行。
編輯:在恢復之前在錯誤陷阱中添加延遲。
4)資料庫太大,導致的延時
https://blog.csdn.net/qq_22855325/article/details/76087138
5)微軟的bug
https://blog.csdn.net/iteye_18932/article/details/82433930
********************
我使用的 訪問Access 資料的 程式,是網上的一個 比較常規的
代碼如下:
Sub New() 'VB.net中類的默認建構式
'訪問資料庫需要某個介面或者工具,業內叫引擎。下面說明一下。引擎分兩種: ACE引擎 和JET引擎
'JET引擎只能訪問off97-----office2003 鏈接字串范例:string connStr = " Provider=Microsoft.Jet.OleDb.4.0;data source = 1.mdb";
'ACE引擎不僅可以訪問office2007以上資料庫版本,而且還可以訪問JET引擎能訪問的office版本。
'鏈接字串范例: ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.accdb";
'ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Test.mdb;Persist Security Info=False"
'原來的資料庫鏈接字串
' m_Database_connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Test.accdb;Persist Security Info=False"
'FBMES系統的資料庫鏈接字串
m_Database_connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\FBMES相關重要檔案\FBMES.accdb;Persist Security Info=True;Jet OLEDB:Database Password=123456"
End Sub
全套代碼如下
(待CSDN審核)
uj5u.com熱心網友回復:
鏈接: https://pan.baidu.com/s/1D-8Q6Xx4AQehQCCTPVhOYg 提取碼: 2ndu 復制這段內容后打開百度網盤手機App,操作更方便哦還是用百度網盤 這個不需要審核
里面是訪問資料庫的源代碼
uj5u.com熱心網友回復:
打算換一個思路,不用網上的那個 庫,用VS自帶的添加資料的方案



uj5u.com熱心網友回復:
Q:未在本地計算機上注冊“microsoft.ACE.oledb.12.0”提供程式解決辦法A1:網上有言論稱, 32位的 程式呼叫 64位的Access 會出現這個問題。
在VS的解決方案的屬性里面修改了 ,目標CPU從AnyCpu切換為 X64 ,結果發現還是報錯,說明不是這個問題
https://blog.csdn.net/YYZZHC999/article/details/79367114
A2:下載 AccessDatabaseEngine 這個玩意
https://www.microsoft.com/en-us/download/details.aspx?id=54920

uj5u.com熱心網友回復:
記錄一下:我通過關鍵詞 AccessDatabaseEngine 得到兩個 檔案, 一個是后綴標注位64位 ,一個沒有標注
因為我們的系統是WIN 10 6位的,我的Office是 2016 64位的,所以我想當然的認為,我該裝一下 后綴位64位的 AccessDatabaseEngine檔案,顯示卻是打臉的。
真是情況要裝 不帶64 后綴的那個,感覺好坑啊
PS:AccessDatabaseEngine各版本下載鏈接
AccessDatabaseEngine2016
https://www.microsoft.com/en-us/download/details.aspx?id=54920
AccessDatabaseEngine2010
https://www.microsoft.com/en-us/download/details.aspx?id=13255
AccessDatabaseEngine2007
https://www.microsoft.com/en-us/download/details.aspx?id=23734
***************
原作者:https://blog.csdn.net/myruo/article/details/87932800
uj5u.com熱心網友回復:
訪問Access資料方案一:https://blog.csdn.net/WKX18330698534/article/details/51175030
這個方案沒有用到ODBC, 他是在VS里面建立一個對Access資料庫的連接, 全程不寫一行代碼 ,就可以將Access資料庫里面東西顯示VBNET 程式的視窗上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/21523.html
標籤:Access
上一篇:求一個驗證碼識別
下一篇:一下操作能否簡化代碼?
