2009-11-13 12 views
0

다음 코드가 작동합니다. 연결이 잘 열리지 만 테이블에 데이터가 있으면 recordset.recordCount는 항상 -1을 반환합니다. ANd 레코드 세트의 메서드 나 속성을 호출하려고하면 Excel이 충돌합니다. 어떤 아이디어? 하지만, 감사Excel VBA에서 ODBC를 사용하여 Oracle 10g에 연결

Sub GetData() 
    Dim conn As New ADODB.connection  
    Dim connString 
    connString = "DSN=name;Uid=user;Pwd=pass" 
    Dim rsRecords As New ADODB.recordSet 

    conn.Open connString 
    rsRecords.CursorLocation = adUseServer 
    rsRecords.Open "select * from xxx", conn, adOpenForwardOnly, adLockReadOnly 

    If conn.State = adStateOpen Then 
     MsgBox rsRecords.RecordCount 
    Else 
     MsgBox "no connection" 
    End If 

    rsRecords.Close 
    Set rsRecords = Nothing 
    conn.Close 
    Set conn = Nothing 
End Sub 

답변

1

당신도 RecordCount 특히 레코드를 가져 오는 않고 작업 할 경우 , 당신은이 큰 작업입니다 경우 adUseClient하지 adUseServer

를 사용할 필요가 당신은 자주 그 일을 할 것입니다 대신 count()를 선택하고 데이터베이스를 계산하도록하십시오. adUseClient을 사용하면 ADO는 마음에 드는지 여부와 상관없이 모든 레코드를 응용 프로그램의 메모리에 자동으로 가져옵니다.

0

일부 Oracle 데이터 유형을 처리 할 수 ​​없어 Excel이 손상된 것 같습니다. select *가 TIMESTAMP (3) 유형의 열을 TIME ZONE으로 반환했습니다. 이렇게하면 레코드 집합에서 읽으려고하자마자 Excel이 손상 될 수 있습니다.

관련 문제