我有一个运行存储过程的函数,它只返回一个行和一列(所以一个结果)。
我试图将一个结果变成一个变量,这样我就可以返回它。我尝试使用recordset.MoveFirst
但是我得到了#34; Rowset位置无法重新启动。"错误。我试着删除它,因为我只有一个结果,但我得到溢出。我的陈述如下:
If recordset.EOF = False Then
recordset.MoveFirst
temp = rs!ID
End IF
temp
是一个整数。我检查了存储过程以确保它只返回单个结果,而且确实存在。难道我做错了什么?有没有更好的方法将结果传递给变量?记录集只能转发(这意味着它是只读的吗?)但是我似乎找不到如何解决这个问题的答案。
答案 0 :(得分:2)
如果之前没有导航过记录集,通常没有理由MoveFirst
。
overflow
与数据库代码无关,是由rs!ID
不适合VBA integer
(16位)引起的,因此请temp
为{{1}而是(32位)并删除Long
。
答案 1 :(得分:0)
确保您没有使用仅向前记录集。默认情况下,记录集是这样的。而是使用动态(adOpenDynamic)或静态(adOpenStatic)游标类型。
您可能还需要设置CursorLocation = adUseClient
。
最后,在致电BOF
之前检查MoveFirst
。
示例:
...
rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM MyTable"
...
If (Not rs.BOF) Then
rs.MoveFirst
End If
答案 2 :(得分:0)
只有当你在EOF时才可以使用MoveFirst转发记录集。 棘手,无证,但工作!!!!