记录集.查找错误: 行集不支持使用存储过程向后滚动



我正在尝试使用Find在我的记录集中查找值,因为似乎不支持Seek,但我无法克服错误

行集不支持向后滚动

根据这个SO线程,我必须指定adOpenDynamic,但这并没有改变错误代码。

我正在使用一个存储过程(sp_fkeys(,它返回所有表的所有键,在本例中,我指定表名时返回一个表。

Private Sub maintablebox_Change()
Dim cnn As ADODB.Connection
Dim keys As ADODB.Recordset
Set cnn = New ADODB.Connection
connstring = "omitted"
cnn.Open connstring
Set keys = New ADODB.Recordset
keys.CursorLocation = adUseServer
query = "EXEC sp_fkeys @fktable_name = 'astAssets'"
keys.Open query, connstring, adOpenDynamic, adLockReadOnly
' >>>>>Error on the line below
keys.Find "PKTABLE_NAME = 'astAssetTypes'"
Debug.Print keys.Fields("FKCOLUMN_NAME")
End Sub

问题不在于keys.CursorType语句,而在于keys.CursorLocation语句。

我用keys.CursorLocation = adUseClient替换了keys.CursorLocation = adUseServer,这立即解决了问题。

工作代码已成为

Private Sub maintablebox_Change()
Dim cnn As ADODB.Connection
Dim keys As ADODB.Recordset
Set cnn = New ADODB.Connection
connstring = "omitted"
cnn.Open connstring
Set keys = New ADODB.Recordset
keys.CursorLocation = adUseClient
query = "EXEC sp_fkeys @fktable_name = 'astAssets'"
keys.Open query, connstring, adOpenDynamic, adLockReadOnly
keys.Find "PKTABLE_NAME = 'astAssetTypes'"
Debug.Print keys.Fields("FKCOLUMN_NAME")
End Sub

我在这个 vbforums 线程上找到了解决方案。我注意到 OP 像我一样使用存储过程,因此我看到的错误代码可能是由于该因素造成的。

我对 ADODB 记录集的了解有限,所以如果有人愿意解释为什么将光标位置设置为 adUseClient 解决了我的问题,请成为我的客人。

我测试了您的代码,可以重现错误。对我来说,这是通过添加 moveFirst 来解决的。

Private Sub maintablebox_Change()
Dim cnn As ADODB.Connection
Dim keys As ADODB.Recordset
Set cnn = New ADODB.Connection
Set keys = New ADODB.Recordset
cnn.Open DBPORT
Set keys.ActiveConnection = cnn
keys.CursorType = adOpenStatic
keys.Open "Select city_name, afas_rel_number, city_code from pkn_cities where has_month_report = true order by city_name ASC;"
keys.MoveFirst 'this did the trick for me
keys.Find "city_code = '1366'"
Debug.Print keys.Fields("city_name")
End Sub

最新更新