我可以在更新过程中检查DAO Recordset字段中的值吗?

时间:2016-12-25 14:50:19

标签: vba ms-access access-vba dao

我希望通过查看对RecordSet的一些影响来结束更新表中数据的循环 在这种情况下:假设我有typedef字段:Table1,一个长字,GroupID,一个双字母。 no主键对Val引用的值没有限制,对单个GroupID的记录数没有限制。

GroupID

Dim ID as Long Dim rst as DAO.Recordset Set rst = CurrentDB.OpenRecordset("SELECT GroupID, SUM(Val) As ValSum FROM Table1 Order By SUM (Val) ASC Group By GroupID") rst.MoveFirst ID = rst.Fields(0) Do while ID = rst.Fields(0) CurrentDB.Execute("INSERT INTO Table1 (GroupID, Val) VALUES (" & ID & ", 1)") rst.Requery()' Change value of first rst?... Loop 'next line of code... 首先指向具有最低rst的GroupID,然后添加应添加到值SUM(Val)的记录,最后还有其他SUM(Val)GroupID的第一条记录。 这应该导致rst重置while ID = rst.Fields(0),然后退出循环。

在实践中,我得到了无限循环。

有没有办法在运行时更新DAO.Recordset的值?

1 个答案:

答案 0 :(得分:2)

您是否正在尝试赢得最令人困惑的代码或什么......?

无论如何,在纠正一些错误之后,你的代码对我有用(你的SQL语法错误,Val是保留字)。

Sub TestConfusingRS()

    Dim ID As Long
    Dim S As String
    Dim rst As DAO.Recordset
    Dim i As Long

    S = "SELECT GroupID, SUM(myVal) As ValSum FROM Tabelle1 Group By GroupID Order By SUM(myVal) ASC"
    Set rst = CurrentDb.OpenRecordset(S)
    ID = rst.Fields(0)

    Do While ID = rst.Fields(0)
        i = i + 1

        Debug.Print i, "Inserting GroupID " & ID
        CurrentDb.Execute "INSERT INTO Tabelle1 (GroupID, myVal) VALUES (" & ID & ", 1)"
        rst.Requery

        ' Prevent endless loop
        If i > 100 Then Exit Do

    Loop

End Sub

+---------+-------+
| GroupID | myVal |
+---------+-------+
|       1 |     6 |
|       2 |     2 |
|       2 |     1 |
|       3 |     5 |
+---------+-------+

我得到了

 1            Inserting GroupID 2
 2            Inserting GroupID 2

它停在这里:

+---------+-------+
| GroupID | myVal |
+---------+-------+
|       1 |     6 |
|       2 |     2 |
|       2 |     1 |
|       2 |     1 |
|       2 |     1 |
|       3 |     5 |
+---------+-------+