Ошибка 3021, текущая запись не найдена, Запрос данных из Access to Excel - PullRequest
0 голосов
/ 05 октября 2011

Я пишу функцию в Excel VBA, которая будет вызываться для извлечения данных из базы данных Access, я использую соединение ADO.Функция Get_g_gtop имеет параметры, определенные ниже.Теперь я пытаюсь использовать объект команды для получения значения из набора записей, однако я получил сообщение об ошибке 3021: либо BOF, либо EOF имеет значение true, либо текущая запись была удалена.Запрошенные операции требуют текущей записи.Отладка указывает на строку: Get_g_gtop = rst.Fields (0). Значение.

Что-то не так с оператором SQL для запроса в Access?Любой совет был бы очень признателен!

Bing

Функция Get_g_gtop (ByVal VehType As String, ByVal Speed ​​As Single) Как вариант

Dim Dbfilepath As String

Dbfilepath = "C:\Users\sevenice\Desktop\EM Database.accdb"

Set cnn = New ADODB.Connection

cnn.Open "Provider= Microsoft.ACE.OLEDB.12.0;" & " Data Source=" & Dbfilepath & ";" & "Persist Security Info =False;"

'Set rst = New ADODB.Recordset

Set cmd = New ADODB.Command
cmd.ActiveConnection = cnn

'Dim QueryStr As String
Dim S As Single

If StrComp(VehType, "LDV") * StrComp(VehType, "LDT") * StrComp(VehType, "LHD<=14K") * StrComp(VehType, "LHD<=19.5K") = 0 Then
   S = 35.6
   'QueryStr = "SELECT [g/gtop] FROM [EM Database].[N (t) Data] WHERE [Vehicle Category]= "" & VehType & "" AND S = 35.6 " & " AND [Speed Lower] <= " & Speed & " AND [Speed Upper] >= " & Speed & ";"

   cmd.CommandText = "SELECT [g/gtop] FROM [EM Database].[N (t) Data] WHERE [Vehicle Category]= "" &  VehType & "" AND S = 35.6 " & " AND [Speed Lower] <= " & Speed & " AND [Speed Upper] >= " & Speed & ";"
   'rst.Open QueryStr, cnn

   Set rst = cmd.Execute

   Get_g_gtop = rst.Fields(0).Value

ElseIf StrComp(VehType, "MHD") * StrComp(VehType, "HHD") * StrComp(VehType, "Urban Bus") = 0 Then
   S = 26.7
   QueryStr = "SELECT [g/gtop] FROM [EM Database].[N (t) Data] WHERE [Vehicle Category]=" & VehType & " AND S = 26.7 " & " AND [Speed Lower] <= " & Speed & " AND [Speed Upper] >=" & Speed & ";"
   rst.Open QueryStr, cnn
   Get_g_gtop = rst.Fields(0).Value

End If

End Function

1 Ответ

0 голосов
/ 06 октября 2011

После того, как вы откроете набор записей (Set rst = cmd.Execute), вам нужно будет проверить, содержит ли он какие-либо данные, прежде чем пытаться получить доступ к этим данным, например:

if not rst.EOF then
'do your stuff with the data
end if

Ссылка на w3schools.com

Полученная вами ошибка означает, что вы не получаете никаких записей из своего оператора SELECT.Проверьте это, как предложено HansUp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...