Vb.net 如何允许多个用户访问/编辑microsoft access数据库?
现在我马上就知道Microsoft access不是多用户访问它的理想客户端,但它是我目前唯一拥有的客户端。我已经建立了一个小程序作为一种库存管理系统。目前有三个用户将定期同时使用它。我遇到的一个问题是,有时数据库将无法访问,并会给出一个错误,说明“某某”用户已经在使用该文件。另一个问题是,我时不时会遇到类似的错误,它表示“数据库已被计算机上的用户置于阻止其打开或锁定的状态”。我使用下面的行通过ACE OLEDB连接到数据库Vb.net 如何允许多个用户访问/编辑microsoft access数据库?,vb.net,visual-studio,ms-access,Vb.net,Visual Studio,Ms Access,现在我马上就知道Microsoft access不是多用户访问它的理想客户端,但它是我目前唯一拥有的客户端。我已经建立了一个小程序作为一种库存管理系统。目前有三个用户将定期同时使用它。我遇到的一个问题是,有时数据库将无法访问,并会给出一个错误,说明“某某”用户已经在使用该文件。另一个问题是,我时不时会遇到类似的错误,它表示“数据库已被计算机上的用户置于阻止其打开或锁定的状态”。我使用下面的行通过ACE OLEDB连接到数据库 con.ConnectionString = "Provider=Mi
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\Tool & Cutter Grinding\Tool Cutter Database.accdb;Persist Security Info = False"
我还更改了实际access数据库中的一些设置,例如:
数据集
/数据表
/等项,因此我可能做得不正确
'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()
转到后端访问数据库文件。文件>选项>客户端设置。对于您的用例,没有锁应该是可以的,但是如果您需要,编辑的记录设置也可以工作 但这是我现在唯一能找到的 事实上,不是 请看一下SQL Server Compact。它是免费的,它很小,并且可以从容地处理多个用户
您可以使用NuGet添加所需的所有引用。是否有用户直接打开数据库,或者只是通过您的程序打开数据库?您如何访问数据?举个例子。我通过.Net使用MS Access的经验是从不使用Access查询-始终直接调用您的sql字符串。@ErikvonAsmuth用户仅通过程序访问数据库。我确实时不时地打开数据库来检查数据和收集信息。@Larsttech我使用基于字符串的sql查询来执行我的所有选择/更新/插入函数。我会在问题的末尾添加一个例子。
有时数据库将无法访问
确实暗示有人可能正在通过Access程序以独占模式打开数据库。在此之前我从未听说过拆分数据库。这听起来似乎有助于缓解数据库中多个用户的压力。我试着把它分开,看看效果如何。我是否需要改变VB方面的任何东西,比如我如何引用数据库或从中获取信息?我相信您在上面的评论中提到,您是通过程序引用数据库的。我删除了答案中包含该信息的部分。您是否使用访问表单与数据库交互?或者你正在使用自己的程序?我正在使用自己的程序与数据库交互。我已经拆分了数据库并重新启动了程序,但它仍然会给我与之前相同的错误拆分数据库对您没有任何用处。拆分是用于使用访问表单和DBOh交互的,好吧,我明白了,谢谢您的帮助!你能想到其他可能有用的方法吗?