現在我知道了,微軟的訪問不是多用戶訪問它的理想客戶端,但它是我現在唯一的一個。我已經建立了一個小程序作爲一種庫存管理系統。目前有三個用戶會同時定期使用它。我遇到的一個問題是,有時數據庫不能被訪問,並且會給出錯誤,指出該文件已被「某某」用戶使用。另一個問題是,我偶爾會發現類似的錯誤:「數據庫已被用戶放置在機器上,以防止它被打開或鎖定」。我使用下面我如何允許多個用戶訪問/編輯Microsoft Access數據庫?
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\Tool & Cutter Grinding\Tool Cutter Database.accdb;Persist Security Info = False"
我也改變了一些設置,在實際訪問數據庫如行通過ACE OLEDB連接連接到數據庫:
- 啓用所有宏
- 將數據庫所在的文件夾添加到受信任位置列表
- 確認數據庫默認設置爲以共享模式打開
我不知道是否有小事我錯過了,或者我需要改變的設置,但截至目前,問題仍然存在。
下面是我如何使用數據庫的一個例子。我使用基於字符串的SQL命令,但我不太熟悉DataSet
/DataTable
/etc。項目,所以我可能會做一些不正確的事情。
'close connection from any previous session
con.Close()
'clear dataset so as not to append data
ds.Clear()
'Select SQL query that selects ALL records from a table
Dim str As String = "SELECT * FROM " & "[" & table & "]" & ""
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\Tool & Cutter Grinding\Tool Cutter Database.accdb;Persist Security Info = False"
'use try catch statement to open the connection
Try
con.Open()
Catch ex As Exception
MsgBox(Convert.ToString(ex))
End Try
'use try catch statement to add a table (dt) to the dataset (ds) in order to store values
Try
ds.Tables.Add(dt)
Catch ex As Exception
End Try
'create new dataadapter object using the sql string from above and the connection created above
da = New OleDbDataAdapter(str, con)
'create new command builder in order to excecute the SELECT SQL statement using the dataadapter created (da)
'specify prefix and suffix for cb
Dim cb = New OleDbCommandBuilder(da) With {
.QuotePrefix = "[",
.QuoteSuffix = "]"
}
'use try catch statement to fill the datatable (dt) using the dataadapter (da)
Try
da.Fill(dt)
Catch ex As Exception
MsgBox(Convert.ToString(ex))
End Try
'set the datasource of the datagridview to the datatable
dgv.DataSource = dt.DefaultView
'close the connection to the database
con.Close()
是否有用戶直接打開數據庫,還是隻通過您的程序? –
你如何訪問數據?顯示一個例子。我通過.Net使用MS Access的經驗永遠不會使用Access查詢 - 總是直接調用你的sql字符串。 – LarsTech
@ErikvonAsmuth用戶只能通過程序訪問數據庫。我確實打開數據庫,然後檢查數據並收集信息。 – NickHallick