recordset.movefirst"行集位置无法重启"

时间:2014-03-12 15:29:17

标签: vba excel-vba ado excel

我有一个运行存储过程的函数,它只返回一个行和一列(所以一个结果)。

我试图将一个结果变成一个变量,这样我就可以返回它。我尝试使用recordset.MoveFirst但是我得到了#34; Rowset位置无法重新启动。"错误。我试着删除它,因为我只有一个结果,但我得到溢出。我的陈述如下:

If recordset.EOF = False Then
    recordset.MoveFirst
    temp = rs!ID 
 End IF

temp是一个整数。我检查了存储过程以确保它只返回单个结果,而且确实存在。难道我做错了什么?有没有更好的方法将结果传递给变量?记录集只能转发(这意味着它是只读的吗?)但是我似乎找不到如何解决这个问题的答案。

3 个答案:

答案 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转发记录集。 棘手,无证,但工作!!!!