Проблема заключается не в операторе keys.CursorType
, а в операторе keys.CursorLocation
.
Я заменил keys.CursorLocation = adUseServer
на keys.CursorLocation = adUseClient
, что немедленно решило проблему.
Рабочий код стал
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 устранила мою проблему, пожалуйста, будьте моим гостем.