2017-07-06 64 views
0

現在我知道了,微軟的訪問不是多用戶訪問它的理想客戶端,但它是我現在唯一的一個。我已經建立了一個小程序作爲一種庫存管理系統。目前有三個用戶會同時定期使用它。我遇到的一個問題是,有時數據庫不能被訪問,並且會給出錯誤,指出該文件已被「某某」用戶使用。另一個問題是,我偶爾會發現類似的錯誤:「數據庫已被用戶放置在機器上,以防止它被打開或鎖定」。我使用下面我如何允許多個用戶訪問/編輯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連接連接到數據庫:

  1. 啓用所有宏
  2. 將數據庫所在的文件夾添加到受信任位置列表
  3. 確認數據庫默認設置爲以共享模式打開

我不知道是否有小事我錯過了,或者我需要改變的設置,但截至目前,問題仍然存在。

下面是我如何使用數據庫的一個例子。我使用基於字符串的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() 
+0

是否有用戶直接打開數據庫,還是隻通過您的程序? –

+0

你如何訪問數據?顯示一個例子。我通過.Net使用MS Access的經驗永遠不會使用Access查詢 - 總是直接調用你的sql字符串。 – LarsTech

+0

@ErikvonAsmuth用戶只能通過程序訪問數據庫。我確實打開數據庫,然後檢查數據並收集信息。 – NickHallick

回答

0

轉到您的後端訪問數據庫文件。文件>選項>客戶端設置。對於你的使用情況不鎖定應該罰款,但編輯的記錄設置也能發揮作用,如果你需要它

Image of Back-End Access File

+0

在此之前,我還沒有聽說過要拆分數據庫。這聽起來像可以幫助數據庫上的多個用戶緊張。我試圖分裂它,看看它是如何工作的。我需要根據我如何引用數據庫或從中獲取信息來改變事物的VB方面? – NickHallick

+0

我相信你在上面的評論中提到你通過一個程序來引用數據庫。我刪除了包含該信息的答案中的部分。您是否使用Access窗體與數據庫交互?或者你在使用自己的程序? –

+0

我正在使用自己的程序與數據庫進行交互。我拆分了數據庫並重新啓動了程序,但它仍然給我以前的錯誤 – NickHallick

0

但其[原文]是唯一一個我有現在

其實並非如此。

看看SQL Server Compact。它是免費的,它很小,它可以安全地處理多個用戶。

您可以使用NuGet添加所需的所有參考。

相關問題