现在我知道,微软访问不是访问它的多个用户的理想客户端,但它是我现在唯一拥有的。我已经建立了一个小程序作为一种库存管理系统。目前有三个用户将同时定期使用它。我遇到的一个问题是,有时数据库将无法访问,并且会出现错误,指出该文件已被“某某”用户使用。另一个问题是,我偶尔会收到类似的错误,其中表示“数据库已被用户置于机器上状态,无法打开或锁定”。我使用下面的行
通过ACE OLEDB连接连接到数据库con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\Tool & Cutter Grinding\Tool Cutter Database.accdb;Persist Security Info = False"
我还更改了实际访问数据库中的一些设置,例如:
我不知道是否有一些我错过的东西或者我需要更改的设置但是到目前为止,问题仍然存在。
以下是我如何使用数据库的示例。我正在使用基于字符串的SQL命令,但对DataSet
/ DataTable
/等不太熟悉。项目,所以我可能做错了。
'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()