【发布时间】:2021-10-11 18:45:20
【问题描述】:
我有一个 Access 数据库,我尝试使用 Excel 工作簿中的 VBA 使用 SQL 命令插入、更新和删除该数据库。我的更新和插入命令工作正常,但我的删除命令冻结 Excel。我尝试过各种方法,有无表别名。
Set dbConnection = CreateObject("ADODB.Connection") 'New ADODB.Connection
dbConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\me\Desktop\Opstats Import\TG_DB.accdb;"
Set dbCommand = CreateObject("ADODB.Command") 'New ADODB.Command
L = "[Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=" & ThisWorkbook.FullName & "].[LImport$]"
With dbCommand
.ActiveConnection = dbConnection
'Update Labour
SQL = "UPDATE tblLabour A" & _
" INNER JOIN " & L & " X" & _
" ON A.PositionID = X.PositionID AND A.Date = X.Date AND A.PayCode = X.PayCode" & _
" SET A.Hours = X.Hours, A.Dollars = X.Dollars"
.CommandText = SQL
.Execute
SQL = "DELETE FROM tblLabour" & _
" WHERE NOT EXISTS (SELECT * FROM " & L & " X WHERE X.PositionID = tblLabour.PositionID AND X.Date = tblLabour.Date AND X.PayCode = tblLabour.PayCode)"
.CommandText = SQL
.Execute
'Insert Labour
SQL = "INSERT INTO tblLabour" & _
" SELECT * FROM " & L & " X" & _
" WHERE NOT EXISTS (SELECT PositionID, Date, PayCode FROM tblLabour A WHERE A.PositionID = X.PositionID AND A.Date = X.Date AND A.PayCode = X.PayCode)"
.CommandText = SQL
.Execute
End With
dbConnection.Close
Set dbCommand = Nothing
Set dbConnection = Nothing
我也试过了:
SQL = "DELETE A FROM tblLabour A" & _
" WHERE NOT EXISTS (SELECT * FROM " & L & " X WHERE X.PositionID = A.PositionID AND X.Date = A.Date AND X.PayCode = A.PayCode)"
.CommandText = SQL
.Execute
由于我的数据源,我没有主键,并且依赖三个字段来创建复合主键,因此查找记录的唯一方法是匹配所有三个字段。
我在 Access 查询中测试了 SQL,它似乎工作正常。
【问题讨论】: