2009-11-13 5 views
0

Le code suivant fonctionne. la connexion s'ouvre correctement mais recordset.recordCount renvoie toujours -1 lorsqu'il y a des données dans la table. ANd Si j'essaie d'appeler des méthodes/propriétés sur le jeu d'enregistrements, cela bloque Excel. Des idées?? MerciConnexion à Oracle 10g avec ODBC à partir d'Excel VBA

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 

Répondre

1

Si vous voulez recordCount travailler, surtout sans aller chercher les dossiers, vous devez utiliser adUseClient pas adUseServer

Si cela est une grande opération et que vous allez faire fréquemment, cependant, vous devriez vraiment sélectionner count() à la place et faire en sorte que la base de données fasse le compte pour vous. Avec adUseClient ADO va chercher silencieusement tous les enregistrements dans la mémoire de votre application si vous le souhaitez ou non.

0

Il semble qu'Excel se soit brisé car il ne peut pas gérer certains types de données Oracle. Le select * renvoyait une colonne de type TIMESTAMP (3) WITH TIME ZONE. Cela provoquerait un blocage d'Excel dès que j'essaierais de lire le jeu d'enregistrements.