Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel VBA使用ODBC连接到Oracle 10g_Oracle_Excel_Vba_Odbc - Fatal编程技术网

从Excel VBA使用ODBC连接到Oracle 10g

从Excel VBA使用ODBC连接到Oracle 10g,oracle,excel,vba,odbc,Oracle,Excel,Vba,Odbc,下面的代码可以工作。连接正常打开,但当表中有数据时,recordset.recordCount始终返回-1。如果我试图调用记录集上的任何方法/属性,它将崩溃Excel。有什么想法吗?? 谢谢 如果希望Recordcount正常工作,尤其是在不提取记录的情况下,则需要使用adUseClientnotadUseServer 但是,如果这是一个大型操作,并且您将经常执行此操作,那么您应该选择count(),让数据库为您执行计数。使用adUseClientADO将自动将所有记录提取到应用程序的内存中,无

下面的代码可以工作。连接正常打开,但当表中有数据时,recordset.recordCount始终返回-1。如果我试图调用记录集上的任何方法/属性,它将崩溃Excel。有什么想法吗?? 谢谢


如果希望Recordcount正常工作,尤其是在不提取记录的情况下,则需要使用
adUseClient
not
adUseServer


但是,如果这是一个大型操作,并且您将经常执行此操作,那么您应该选择count(),让数据库为您执行计数。使用
adUseClient
ADO将自动将所有记录提取到应用程序的内存中,无论您是否喜欢。

Excel似乎正在崩溃,因为它无法处理某些Oracle数据类型。 select*返回了一个带有时区的TIMESTAMP(3)类型的列。 这将导致Excel在我试图读取记录集时崩溃

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