[ADODB] Erreur dans la méthode Getrows d'un recordset

katalai Messages postés 3 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009 - 14 oct. 2009 à 09:47
katalai Messages postés 3 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009 - 15 oct. 2009 à 14:09
Bonjour,

Afin de récupérer uniquement les données d'un champ d'un recordset, j'essaie sans succès d'utiliser la méthode Getrows avec paramètres dont la définition est la suivante :

array = recordset.GetRows( Rows, Start, Fields )

Les paramètres étant optionnels, mon code est le suivant :
---------------------------------------------------------------
Dim rsTemp as ADODB.recordset
Dim arrTemp as variant
Dim sRequete as string
sRequete = "select * from toto"
Set rsTemp = CurrentDb.OpenRecordset(sRequete, dbOpenForwardOnly, dbReadOnly)

arrTemp =rsTemp .GetRows(, , NOM_DU_CHAMP)
---------------------------------------------------------------
La requête est correct et le recordset est bien rempli.
L'erreur retournée est la suivante : "argument non valide"

j'ai les références suivantes :

Visual Basic for applications
microsoft access 10 object library
OLE Automation
Microsoft active x data objects 2.1 library
microsoft excel 10 object library
microsoft scripting runtime
microsoft DAO 3.6 object library
microsoft active x data objects recordset 2.8 library

En revanche la méthode fonctionne correctement lorsque je mets un seul argument :

arrTemp =rsTemp .GetRows(1000)

Quelqu'un a-t-il une idée?

Merci d'avance pour vos réponses

3 réponses

katalai Messages postés 3 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 17:45
Un petit up

Au cas où, si quelqu'un à une autre solution, je suis très intéressé aussi...

Mon objectif principal reste d'éviter de copier ligne par ligne dans le fichier Excel en parcourant le recordset grâce à la méthode suivante :

i=1
Do While Not rsTable.EOF

xlSheet.worksheets(nameFeuil).Cells(i, 1) = CDbl(rsTable("NOM_CHAMP"))

rsTable.MoveNext
i = i + 1
Loop


J'ai en effet plus de 2500 lignes et c'est très très long ; 20 minutes environ).

C'est pour cette raison que je cherche à récupérer la totalité des lignes d'un champ d'un recordset afin de les copier directement dans Excel sans faire de boucle

Merci de m'avoir lu
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 oct. 2009 à 08:29
Bonjour,

Ton code mélange deux choses ADO et DAO, ce dernier étant obsolète et remplacé par ADO.
Donc 1ère chose, supprimer la référence à DAO et modifie ton code en conséquence (la connexion et la récup de ton recordset).

De plus tu utilises 2 références à ADO mais de versions différentes la 2.1 (qui date de Mathusalem) et la 2.8), ne prends QUE celle de la version 2.8 (surtout qu'il semble que la 2.1 était buguée).

Enfin en ce qui concerne ta 2ème question, il y a effectivement beaucoup plus rapide. Sous réserve que ton code soit bien situé sous Excel, sélectionne la 1ère cellule devant contenir tes données et copie ce code:

ActiveSheet.Range("A2").Select rsTable.MoveFirst
call ActiveCell.CopyFromRecordset(rsTable)

Ce qui ne t'oblitère pas du 1er point pour avoir un code propre et orthodoxe.

Calade
0
katalai Messages postés 3 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 14:09
Merci pour tes précisions Calade

Désormais, la méthode getrows accepte bien les paramètres cités plus haut
0
Rejoignez-nous