[VBA] problème Filter sur ADODB

Fermé
Slyt - 27 mai 2008 à 18:35
 slyt - 3 juin 2008 à 14:48
Bonjour,

Je programme en VBA un outil qui va chercher des éléments dans plusieurs tables suivants certains critères.
L'exécution de la requête dure à elle-seule environ 20 secondes. Or je dois l'effectuer plus de 700 fois, du coupje me suis tourné vers un filtre.

J'ai donc contruit ma requête sans certains filtres. Et c'est dans la boucle (les 700 fois) que j'appelle le filtre.
mais voilà j'ai l'erreur suivante : "Erreur d'exécution 3001 : Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another".

Voici en gros ce que cela donne :

--------------------------------------------------
Dim rRequete As ADODB.Recordset
Set rRequete = New ADODB.Recordset
rRequete.CursorLocation = adUseClient

sRequete = "SELECT DISTINCT TABLE1.[CHAMP1], TABLE2.[CHAMP2], TABLE3.[CHAMP3]" & _
" FROM ((TABLE1 INNER JOIN TABLE2 ON TABLE1.[CHAMP1] = TABLE2.[CHAMP1]) INNER JOIN TABLE3 ON (TABLE2.[CHAMPx] = TABLE3.[CHAMP1])" & _
" WHERE ((TABLE1.[CHAMP6] IN ('3367','3366','3361','3310')) AND (TABLE2.[CHAMP3] IN ('00','33','60','80'))"
rRequete.Open sRequete, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

for i = 0 to 700

sValue = ' récupération de la valeur
rRequete.Filter = "(TABLE3.[CHAMPx]='" & sValue & "')" <-- Erreur à ce niveau

Do While Not rRequete.EOF
' traitement du résultat...
rRequete.MoveNext
loop

i = i+1
next i

rRequete.Close
Set rRequete = Nothing
--------------------------------------------------

j'ai peur que l'erreur vienne du fait que j'ai déjà des conditions (WHERE) dans ma requête.
J'ai essayé d'effectuer la requête sans aucune condition (WHERE) mais elle met beaucoup trop de temps.

Est-ce que vous connaissez une limite à ce sujet ?
Si non, pouvez-vous me dire d'où peut venir cette erreur ?

Merci d'avance.

1 réponse

Pour info, j'ai trouvé la solution à mon problème.
Et comme ça peut servir à d'autres personnes, qui sait, je prend le temps de me répondre.

Pour rappel, l'erreur était ici :
rRequete.Filter = "(TABLE3.[CHAMPx]='" & sValue & "')"

A priori, filter n'aime pas l'information TABLE3.
Il faut par conséquent paramétrer ainsi :
rRequete.Filter = "([CHAMPx]='" & sValue & "')"

Et là ça marche ! Ca me fait passer de 20s à 1s par boucle.

Merci quand même.
0