0

我正在研究一些 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 表执行选择。

问题是在 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
4

1 回答 1

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()"
于 2012-09-25T12:40:32.103 回答