我有几个用于输入数据的 excel 文件。文件在功能上是相同的,我们每个服务中心都有一个。在表单中有一个按钮可以启动一个宏,该宏将数据转换为另一张表上的表格格式,然后上传到 Access db。
在我自己的电脑上一切正常。添加新行、更新现有行和删除现有角色。我使用了早期绑定,当我将文件移动到我们的网络驱动器时会导致问题。我设法将文件转换为后期绑定,但随后出现了其他问题。
大多数情况下,上传到 Access 不起作用,尤其是当多个用户尝试同时做一些事情时。最常见的错误代码是我没有使用可更新查询或者此方法不支持向后滚动。很抱歉没有报告实际的错误代码,但我目前无法复制它们。
我的连接代码如下,它是来自不同示例的复制粘贴代码的混合。
打开连接和其他prestuff
Sub excel2access()
Const adUseClient = 3
Const adUseServer = 2
Const adLockOptimistic = 3
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Dim oConn As Object
Dim cmd As Object
Dim rs As Object
Dim r As Long
Dim criteria As String
Dim Rng As Range
Set oConn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source= '" & Range("dbpath").Value & "\" & Range("dbfile").Value & "' ;"
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open "Select * from need_rows WHERE service_center = '" & Range("scenter_name").Value & "'", oConn
r = 2 ' the start row in the worksheet
Sheets("data").Select
以下位查看 excel 表中的数据,并尝试从为该服务中心找到的记录集中查找匹配项。如果未找到匹配,则创建新记录,如果找到匹配,则更新旧记录。
Do While Len(Range("A" & r).Formula) > 0
With rs
criteria = Range("D" & r).Value
.Find "identifier='" & criteria & "'"
If (.EOF = True) Or (.BOF = True) Then
.AddNew ' create a new record
.Fields("service_center") = Range("scenter_name").Value
.Fields("product_id") = Range("A" & r).Value
.Fields("quantity") = Range("B" & r).Value
.Fields("use_date") = Range("C" & r).Value
.Fields("identifier") = Range("D" & r).Value
.Fields("file_type") = Range("file_type").Value
.Fields("use_type") = Range("E" & r).Value
.Fields("updated_at") = Now
.Update
Else
If .Fields("quantity") <> Range("B" & r).Value Then
.Fields("quantity") = Range("B" & r).Value
.Fields("updated_at") = Now
.Update ' stores the new record
End If
End If
.MoveFirst
End With
r = r + 1
Loop
rs.Close
Set rs = Nothing
Set oConn = Nothing
MsgBox "Confirmation message"
End Sub
编辑:基于 barrowc 的链接,我将光标类型更改为 adOpenStatic。我对几个尝试同时上传数据的用户进行了测试,一切正常。直到一个用户留在文件中并在那里花了很长时间编辑数据,然后尝试将数据上传到数据库并收到以下错误消息: https ://dl.dropbox.com/u/3815482/vba_error.jpg
再次,我回到了我开始的地方。
此外,我也愿意接受对我的代码的一般反馈。
我正在使用 Office 2010。
我做错了吗?感谢所有帮助。