我有以下更新语句,这些语句是通过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)
答案 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描述的技术