2011-10-05 2 views
0

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 

최종 기능

+0

문제를 재현하는 데 필요한 최소한의 코드 샘플을 제거하고 브라우저 창을 스크롤하지 않아도되도록 긴 선을 분할하면 문제를 쉽게 해결할 수 있습니다. – HansUp

+1

@HansUp : ... 또는 SQL DDL 및 SQL DML을 포함하도록 코드 샘플을 확장하여 문제를 재현하기 위해 테이블과 샘플 데이터를 다시 작성한 경우) – onedaywhen

답변

0

당신은 당신이 확인해야합니다 레코드 (Set rst = cmd.Execute)을 연 후 해당 데이터에 액세스하기 전에 데이터가 포함되어 있는지 여부를 예를 들면 다음과 같습니다.

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

Reference on w3schools.com

받은 오류는 SELECT 문에서 기록을 가져 오지 못했다는 것을 나타냅니다. HansUp에서 제안한 내용을 확인하십시오.

관련 문제