如何在宏中合并多个SQL更新语句?

时间:2014-05-07 00:29:59

标签: sql vba ms-access

我有以下更新语句,这些语句是通过VBA执行的。拥有多个更新语句似乎是次优的。我如何将这些合并为一个声明?这些语句更新了Access数据库。

strSqlLoc = "UPDATE table1 AS type SET type.Value='" & Range("C" & i).Value & "' WHERE PropertyID=" & Range("B" & i).Value & ";"
strSqlEnv = "UPDATE table1 AS type SET type.Value='" & Range("E" & i).Value & "' WHERE PropertyID=" & Range("D" & i).Value & ";"
strSqlClass = "UPDATE table1 AS type SET type.Value='" & Range("G" & i).Value & "' WHERE PropertyID=" & Range("F" & i).Value & ";"

Set rs = cn.Execute(strSqlLoc)
Set rs = cn.Execute(strSqlEnv)
Set rs = cn.Execute(strSqlClass)

1 个答案:

答案 0 :(得分:1)

另一次更新

对于多行更新,看起来Batch Update可以解决问题。

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset

Dim strSQL As String
Dim lngUpdated As Long

rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.CursorLocation = adUseClient
rst.LockType = adLockBatchOptimistic
rst.Open ("Select * from table1 ")

lngUpdated = 1

rst.Find "PropertyID=" & Range("B1")

Do Until rst.EOF
    rst("Value") = Range("C" & lngUpdated)
    lngUpdated = lngUpdated + 1
    rst.Find "PropertyID=" & Range("B" & lngUpdated), 1, adSearchForward
Loop

// Try repeating above for the other two columns?

rst.UpdateBatch

rst.Close
Set rst = Nothing

除非您正在更新的数据已经在数据库中的某个位置,否则无法真正做到这一点。您可以尝试描述here

的案例陈述技术

<强>更新

我认为我批量上传背后的直觉是,如果你能够以一种方式在服务器端以一种方式获取数据,那么你可以加入它并在一个更新语句中更新另一个表。如果您只更新三个值 - 请查看在访问端创建查询并在一次调用中传递六个参数,然后在查询中使用here描述的技术