Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何允许多个用户访问/编辑microsoft access数据库?_Vb.net_Visual Studio_Ms Access - Fatal编程技术网

Vb.net 如何允许多个用户访问/编辑microsoft access数据库?

Vb.net 如何允许多个用户访问/编辑microsoft access数据库?,vb.net,visual-studio,ms-access,Vb.net,Visual Studio,Ms Access,现在我马上就知道Microsoft access不是多用户访问它的理想客户端,但它是我目前唯一拥有的客户端。我已经建立了一个小程序作为一种库存管理系统。目前有三个用户将定期同时使用它。我遇到的一个问题是,有时数据库将无法访问,并会给出一个错误,说明“某某”用户已经在使用该文件。另一个问题是,我时不时会遇到类似的错误,它表示“数据库已被计算机上的用户置于阻止其打开或锁定的状态”。我使用下面的行通过ACE OLEDB连接到数据库 con.ConnectionString = "Provider=Mi

现在我马上就知道Microsoft access不是多用户访问它的理想客户端,但它是我目前唯一拥有的客户端。我已经建立了一个小程序作为一种库存管理系统。目前有三个用户将定期同时使用它。我遇到的一个问题是,有时数据库将无法访问,并会给出一个错误,说明“某某”用户已经在使用该文件。另一个问题是,我时不时会遇到类似的错误,它表示“数据库已被计算机上的用户置于阻止其打开或锁定的状态”。我使用下面的行通过ACE OLEDB连接到数据库

con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\Tool & Cutter Grinding\Tool Cutter Database.accdb;Persist Security Info = False"
我还更改了实际access数据库中的一些设置,例如:

  • 启用所有宏
  • 将数据库所在的文件夹添加到受信任位置列表中
  • 确认数据库默认设置为在共享模式下打开
  • 我不知道我是否错过了一些小东西,或者我需要改变一个环境,但到目前为止,问题仍然存在

    下面是我如何使用数据库的示例。我使用的是基于字符串的SQL命令,但不太熟悉
    数据集
    /
    数据表
    /等项,因此我可能做得不正确

     '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交互的,好吧,我明白了,谢谢您的帮助!你能想到其他可能有用的方法吗?