Connection ODBC Oracle+nombre d'enregistrements

keke - 12 nov. 2001 à 13:47
 keke - 12 nov. 2001 à 14:41
Voici mon code:

Set WSODBC = DBEngine.CreateWorkspace("EspaceWork", "", "", dbUseODBC)
Workspaces.Append WSODBC

Set datoutil = WSODBC.OpenDatabase("exemple", dbDriverCompleteRequired, False, "ODBC;DSN=VODB;UID=DWBCP;PWD=DWBCP")
Set rcdtest = datoutil.OpenRecordset("Select * From TC113_TBLCR", dbOpenDynamic)

If Err.number <> 0 Then
MsgBox "Erreur de connection = " & Err.number & " - " & Err.Description
Else
MsgBox "Connection etablie"
End If

For i = 0 To rcdtest.RecordCount - 1 If rcdtest.Fields(3).Value 40 And rcdtest.Fields(0).Value 22 Then
Debug.Print rcdtest.Fields(1)
End If
rcdtest.MoveNext
Next i

Le probleme est que la valeur de rcdtest.recordcount est égale à 100 lors de l'execution, alors que la table contient plus de 4000 enregistrements.
Quelqu'un pourrait il me dire d'ou ca vient et comment y remédier.
Merci

2 réponses

100 correspond en fait, à la taille de la fenêtre (=nombre de lignes) par défaut de ton recordset ( voir propriété cachesize de ton recordset). Quand tu ouvre un recordset, le moteur Jet demande au serveur de n'envoyer seulement les 100 premières lignes. Si tu accède au 101 ième ligne, il y aura un envoi de 100 autres lignes etc... C'est en fait, pour optimiser le réseau, et ne pas occuper toute la bande passante.

si tu faisais
rcdtest.movelast
et rcdtest.recordcount alors tu obtient bien tes 4000 lignes:
La propriété recordcount ne contient le nombre de lignes que uniquement si toutes les lignes ont été accédées...

Tu peux faire ensuite
rcdtest.movefirst pour revenir à la première ligne. Mais que bouffe du temps...

Si tu ne fais que ça dans ton code, alors fais comme suit:

while not rcdtest.eof
...
rcdtest.MoveNext
wend

Bon courage
A+
0
Super, merci beaucoup.
A+
0
Rejoignez-nous