【发布时间】:2017-07-22 17:23:28
【问题描述】:
我有 800 到 1000 个 Excel 文件要上传到 Access。这些文件有特定的表格和6-7个表格,由不同的管理者在不同的时间填写。这些文件中的数据可能会不时更新或更改。
我有两个想法:
我最想要的是在这个 Excel 工作表中创建一个 VBA 宏,当经理填写所有数据时,它会在关闭时自动运行并将数据从 Excel 上传到 Access。所以我总是在 Access 中有最新的数据。 在这种情况下,我需要使用 ADO,因为我不知道是否有任何经理在他们的 PC 上安装了或没有安装 MS Access 才能使用 DAO。
第二个 - 我从 Access 运行宏,当它们准备好时读取所有 800-1000 个文件。在这种情况下,我可以使用 DAO 和 ADO。但我不想一个人完成这项工作。
我有第一个案例的测试代码。
Sub TestUpload()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\User\Desktop\TestDataBase.accdb;"
rs.Open "TestDB", cn, adOpenStatic, adLockOptimistic, adCmdTable
Dim contractSAP As String
contractSAP = Sheets("TestUpload").Range("A1").Value
Dim contractASU As String
contractASU = Sheets("TestUpload").Range("B1").Value
Dim strSqlSelect As String
Dim strSqlInsert As String
Dim strSqlUpdate As String
strSqlSelect = "SELECT 1 FROM TestDB WHERE ContractNumSAP = '" & contractSAP & "'"
strSqlInsert = "INSERT INTO TestDB (ContractNumSAP, ContractNumASU) VALUES ('" & contractSAP & "', '" & contractASU & "')"
strSqlUpdate = "UPDATE TestDB SET ContractNumASU = '" & contractASU & "' WHERE ContractNumSAP = '" & contractSAP & "'"
cn.Execute (strSqlInsert)
End Sub
我有一些问题。
1) 如果两个或多个管理器同时将数据上传到同一个表,是否会发生冲突?记录由主键区分。
2) 在 Access 中检查表中是否已有记录的最佳方法是什么?
3) 上传或插入的最佳方式?
4) 有没有办法通过 ADO 将整个 Range/Table 中的记录从 Excel 插入/更新到 Access,或者我是否需要检查循环中每一行的记录是否存在?
5) 有没有一种方法可以使用 SQL 从 Excel 工作表中选择数据并在同一个 SQL 查询中插入/更新它们,而不是像现在这样使用 Cell 逐条寻址?
【问题讨论】:
标签: sql excel vba ms-access ado