Recordset & VBA
Fermé
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
-
22 juil. 2009 à 12:31
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 6 août 2009 à 18:33
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 6 août 2009 à 18:33
A voir également:
- Recordset & VBA
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba dépassement de capacité ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
4 réponses
arthur24
Messages postés
17
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
20 août 2015
1
22 juil. 2009 à 15:04
22 juil. 2009 à 15:04
Hello,
2 solutions à ton pb :
- par prog :
1°) tu ouvres ton rs et tu fais une première lecture de ton champs dans une variable temp
2°) tu fais une nouvelle lecture et tu compares temp et son équivalent dans le rs en cours
3°) tu sauvagardes le champs en cours dans temp
4°) tu boucles sur 2-3 jusqu'à la fin de ton jeux de données
- par requète, tu constitue un jeux de données contenant, sur chaque ligne N et N-1 et tu compare directement à chaque itération de ta boucle. La requète peut ressembler à ça :
select *
FROM Table1 LEFT OUTER JOIN Table1 Table2 ON
Table1.clé = Table2.clé AND Table1.NumLigne = Table2.NumLigne + 1
ORDER BY Table1.clé, Table1.NumLigne
Dans ce cas, table1 et table2 sont identiques, la même table appelée 2 fois dans la requète. Il suffit que ces tables soient dotées d'un compteur pour la correspondance.
Bon courage !
2 solutions à ton pb :
- par prog :
1°) tu ouvres ton rs et tu fais une première lecture de ton champs dans une variable temp
2°) tu fais une nouvelle lecture et tu compares temp et son équivalent dans le rs en cours
3°) tu sauvagardes le champs en cours dans temp
4°) tu boucles sur 2-3 jusqu'à la fin de ton jeux de données
- par requète, tu constitue un jeux de données contenant, sur chaque ligne N et N-1 et tu compare directement à chaque itération de ta boucle. La requète peut ressembler à ça :
select *
FROM Table1 LEFT OUTER JOIN Table1 Table2 ON
Table1.clé = Table2.clé AND Table1.NumLigne = Table2.NumLigne + 1
ORDER BY Table1.clé, Table1.NumLigne
Dans ce cas, table1 et table2 sont identiques, la même table appelée 2 fois dans la requète. Il suffit que ces tables soient dotées d'un compteur pour la correspondance.
Bon courage !
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
22 juil. 2009 à 15:17
22 juil. 2009 à 15:17
Merci Arthur,
J'ai fais un code depuis tout à l'heure (ici il compare avec la valeur d'après ensuite reviens à la position d'avant car il est déja dans une boucle), il me semble bon mais il bloque :
'****DEPLACEMENT DE CURSEUR AUTOUR ****
'****DU RECORDSET POUR COMPARER LA REF*
'For k = 1 To rs_source.RecordCount
'While Not(rs_source.EOF)
DIM compare1 AS String, compare2 As String
compare1 = rs_source.Fields(1)
rs_source.MoveNext
compare2 = rs_source.Fileds(1)
if (compare1 <> compare2) Then 'Revenir à la boucle de départ
Else 'Ecrire dans le meme fichier
End IF
rs_source.MovePrevious
'Next k
'****FIN DE DEPLACEMENT DU CURSEUR****
Ce code est à l'intérieur d'une autre boucle Do Until(rs_source.EOF). Je pense que c'est la d'ou vient le problème peut etre. Si tu veux jeter un coup d'oeil sur mon code entier dis moi et je le met en pièce jointe.
Merci d'avance ;D
J'ai fais un code depuis tout à l'heure (ici il compare avec la valeur d'après ensuite reviens à la position d'avant car il est déja dans une boucle), il me semble bon mais il bloque :
'****DEPLACEMENT DE CURSEUR AUTOUR ****
'****DU RECORDSET POUR COMPARER LA REF*
'For k = 1 To rs_source.RecordCount
'While Not(rs_source.EOF)
DIM compare1 AS String, compare2 As String
compare1 = rs_source.Fields(1)
rs_source.MoveNext
compare2 = rs_source.Fileds(1)
if (compare1 <> compare2) Then 'Revenir à la boucle de départ
Else 'Ecrire dans le meme fichier
End IF
rs_source.MovePrevious
'Next k
'****FIN DE DEPLACEMENT DU CURSEUR****
Ce code est à l'intérieur d'une autre boucle Do Until(rs_source.EOF). Je pense que c'est la d'ou vient le problème peut etre. Si tu veux jeter un coup d'oeil sur mon code entier dis moi et je le met en pièce jointe.
Merci d'avance ;D
arthur24
Messages postés
17
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
20 août 2015
1
22 juil. 2009 à 15:34
22 juil. 2009 à 15:34
ça ne marchera pas. Tu ne testes pas l'EOF sur ta seconde lecture et tu vas te planter en fin de rs.
DIM compare1 AS String
rs_source.open...
if not rs_source.EOF then
compare1 = rs_source.Fields(1)
rs_source.movenext
end if
While Not(rs_source.EOF)
if (compare1 <> rs_source.Fields(1)) Then
' ton traitement en cas de différence
Else
' ton traitement en cas d'égalité
End IF
compare1 = rs_source.Fileds(1)
rs_source.MoveNext
wend
Du coup compare2 est inutile
A+
DIM compare1 AS String
rs_source.open...
if not rs_source.EOF then
compare1 = rs_source.Fields(1)
rs_source.movenext
end if
While Not(rs_source.EOF)
if (compare1 <> rs_source.Fields(1)) Then
' ton traitement en cas de différence
Else
' ton traitement en cas d'égalité
End IF
compare1 = rs_source.Fileds(1)
rs_source.MoveNext
wend
Du coup compare2 est inutile
A+
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
6 août 2009 à 18:33
6 août 2009 à 18:33
Salut arthur 24
Je reviens vers toi pour te donner des nouvelles concernant La navigation dans le RecordSet.
le code que tu m'as donné me revoie toujours l'erreur me disant que suis en fin du RecordSet :(
If Not rs_source.EOF Then
compare1 = rs_source.Fields(0)
rs_source.MoveNext
End If
While Not (rs_source.EOF)
If ((compare <> rs_source.Fields(0) And rs_source.AbsolutePosition = 0) Or (compare <> rs_source.Fields(0) And rs_source.AbsolutePosition <> 0)) Then
GoTo CreateNouveauFichier
Else
GoTo AjouterMemeFichier
End If
compare1 = rs_source.Fields(0)
rs_source.MoveNext
Wend
L'erreur me dis que Aucun Enregistrement trouvé :(
Je Rappel Que le meme RecordSet est appelé dans le meme code pour traiter ses enregistrement 1 par 1.
Merci d'avance
Je reviens vers toi pour te donner des nouvelles concernant La navigation dans le RecordSet.
le code que tu m'as donné me revoie toujours l'erreur me disant que suis en fin du RecordSet :(
If Not rs_source.EOF Then
compare1 = rs_source.Fields(0)
rs_source.MoveNext
End If
While Not (rs_source.EOF)
If ((compare <> rs_source.Fields(0) And rs_source.AbsolutePosition = 0) Or (compare <> rs_source.Fields(0) And rs_source.AbsolutePosition <> 0)) Then
GoTo CreateNouveauFichier
Else
GoTo AjouterMemeFichier
End If
compare1 = rs_source.Fields(0)
rs_source.MoveNext
Wend
L'erreur me dis que Aucun Enregistrement trouvé :(
Je Rappel Que le meme RecordSet est appelé dans le meme code pour traiter ses enregistrement 1 par 1.
Merci d'avance
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
22 juil. 2009 à 15:48
22 juil. 2009 à 15:48
Merci pour ta réponse,
En faite, mon rs_source.EOF est vérifié au début du code. C'est pour ça je reviens à l'enregistrement en cour avec MoveNext
Ta solution est bonne, je vais la tester et te donnerais des nouvelles dès ce soir :)
Encore merci
En faite, mon rs_source.EOF est vérifié au début du code. C'est pour ça je reviens à l'enregistrement en cour avec MoveNext
Ta solution est bonne, je vais la tester et te donnerais des nouvelles dès ce soir :)
Encore merci