Excel 데이터베이스에서 데이터를 추출하기 위해 호출되는 Excel VBA에서 함수를 쓰고 있습니다. ADO 연결을 사용하고 있습니다. Get_g_gtop 함수는 다음과 같이 정의 된 매개 변수를 갖습니다. 이제 명령 개체를 사용하여 레코드 세트에서 값을 가져 오려고 시도하지만 오류 메시지 3021이 표시됩니다. BOF 또는 EOF가 참이거나 현재 레코드가 삭제되었습니다. 요청 된 작업에는 현재 레코드가 필요합니다. 디버그는 줄을 가리 킵니다. Get_g_gtop = rst.Fields (0) .Value.오류 3021, 현재 레코드를 찾을 수 없습니다. Excel에서 데이터를 쿼리하십시오.
Access에서 쿼리 할 SQL 문에 문제가 있습니까? 어떤 조언을 주시면 매우 감사하겠습니다!
빙
기능 Get_g_gtop (문자열로 ByVal의 VehType, 단일로 ByVal의 속도) 변형으로
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
최종 기능
문제를 재현하는 데 필요한 최소한의 코드 샘플을 제거하고 브라우저 창을 스크롤하지 않아도되도록 긴 선을 분할하면 문제를 쉽게 해결할 수 있습니다. – HansUp
@HansUp : ... 또는 SQL DDL 및 SQL DML을 포함하도록 코드 샘플을 확장하여 문제를 재현하기 위해 테이블과 샘플 데이터를 다시 작성한 경우) – onedaywhen