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
Bonjour,

Comment peux t-on comparer deux valeurs de champs d'un Recordset?
Je m'exprime, j'ai 1 recordset issu d'une requête. Je me place dans la ligne N (avec une boucle), je me place dans le champ 3 de cette meme ligne, je veux comparer sa valeur avec celle d'avant (N-1)
Quelqu'un a une idée s'il vous plaît?

Merci d'avance.

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
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 !
1
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
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
1
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
ç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+
0
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
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
0
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
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
0