磁盘上的数据不会直接使用记录集上的“更新”功能进行更新

时间:2012-09-25 12:34:27

标签: vba adodb

我正在研究一些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

1 个答案:

答案 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()"