我正在研究一些VBA宏。我还使用ADODB.Recordset访问Access数据库中的数据。
现在,我需要遍历表中的记录并在此循环中,还需要在另一个函数中更新相同的表。
这是代码(为便于阅读而清理)。
Dim strSql As String
Dim rstCycles As adodb.Recordset
strSql = "SELECT * FROM tblCycles WHERE DatePlanning = #" & dteCurrentDate & "#"
Set rstCycles = SelectQuery(strSql)
While Not rstCycles.EOF
if ... then
rstCycles("NoCycle1") = ...
rstCycles.Update
end if
RefreshPlanning (*)
rstCycles.MoveNext
Wend
(*)在这个函数中,我在tblCycles表上执行select。
问题出在rstCycles.Update之后,数据没有立即记录在磁盘上,因此对RefreshPlanning的调用不会读取更新的数据。如果我在更新后设置'1秒暂停'一切正常。我不想在循环中使用一种暂停。还有其他解决方案吗?
更新---------------
RefreshPlanning是一个基于我的tblCycles表刷新excel表的简单函数。
Sub RefreshPlanning(DatePlanning As Date, CodeEquipement As String)
Dim strSql As String
Dim rstCycles As adodb.Recordset
strSql = "SELECT * FROM tblCycles WHERE DatePlanning = #" & DatePlanning & "# AND CodeEquipement = '" & CodeEquipement & "'"
Set rstCycles = SelectQuery(strSql)
While Not rstCycles.EOF
' Some code here to update my excel sheet
' ...
rstCycles.MoveNext
Wend
End Sub
答案 0 :(得分:0)
DAO比使用MS Access的ADO快许多倍:
Dim strSql As String
Dim rstCycles As DAO.Recordset
Dim db As Database
Set db = OpenDatabase("z:\docs\test.accdb")
strSql = "SELECT * FROM tblCycles WHERE DatePlanning = #" & dteCurrentDate & "#"
Set rstCycles = db.OpenRecordset(strSql)
While Not rstCycles.EOF
if ... then
rstCycles.Edit
rstCycles("NoCycle1") = ...
rstCycles.Update
end if
''Need more information here
RefreshPlanning (*)
rstCycles.MoveNext
Wend
如果dteCurrentDate与今天相同,您可以说:
"SELECT * FROM tblCycles WHERE DatePlanning = Date()"