我希望通过查看对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的值?
答案 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 |
+---------+-------+