IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Comparaison entre deux enregistrements


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Comparaison entre deux enregistrements
    Bonjour,

    Je ne suis vraiment pas familier en VB alors je me dois de me trouner vers vous.

    J'utilise VB6. Dans mon projet j'ai une table 'INFO' qui contient les champs
    ex: NoClient, NomClient, Produit.

    Le but est que je dois appliquer un calcul si l'enregistrement précédent sur le NoClient est égale à l'enregistrement en cours. Et ce jusqu'à la fin de mon fichier.

    enreg(1) =NoClient = 12345
    enreg(2) =NoClient = 12345
    j'applisque ma formule


    enreg(1) =NoClient = 99999
    enreg(2) =NoClient = 12345
    je ne fais rien


    merci beaucoup de m'aider

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    bonjour

    c'est pas trés clair,
    if.........then

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim i as integer
    dim findetable as integer
     
    for i= 1 to findetable
     
        if enreg( i +1 ) =enreg( i ) then
                   "j'applique la formule"
                    elseif i = findetable then
                    exit for
        end if
    next
    A+

  4. #4
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 087
    Points : 16 673
    Points
    16 673
    Par défaut
    Salutprovoquera une erreur (Erreur d'éxécution N°9, Indice en dehors de la plage), à cause de car cette condition étant évalué avant le ElseIf qui suit.

    solution pour ne pas déclancher l'erreur tout en supprimant la condition ElseIf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i= 1 to findetable-1
    je dois appliquer un calcul si l'enregistrement précédent sur le NoClient est égale à l'enregistrement en cours. Et ce jusqu'à la fin de mon fichier.
    Astragale
    peux-tu nous préciser, ton traitement porte sur une Table et/ou un fichier ?
    La strtégie pouvant différer (pensant a la possibilité de Order By sur le champs NoClient (s'il est bien un numérique).
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    provoquera une erreur (Erreur d'éxécution N°9, Indice en dehors de la plage)
    Exact Progelect !
    Et en plus solution encore plus simple.

    A+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Désolée pour mon manque de clarté.

    Ma table est une table access nommée Commande, contenant des enregistrements et comme champs:
    NoClient, NomClient, NoCommande, Prix.
    Donc je peux retrouver plusieurs no de commande pour le même client et en plus, le no de commande peux se répéter deux fois s'il y a lieu.
    Par contre, si le no de commande se répète, sur le deuxième enregistrement du non de commande, je dois mettre le prix à zéro.

    Ex:


    NoClient NomClient NoCommande Prix

    9999 yyyyy bbbb 25.00 $
    8888 ccccc uuuu 35.00 $
    1234 xxxxx abcd 10.00 $
    1234 xxxxx abcd 0.00 $
    7777 kkkkk vvvv 45.00 $
    Donc comme le NoCommande abcd se répète pour le même client,
    je mets 0 sur la deuxième ligne de ce numéro de commande.


    merci

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 087
    Points : 16 673
    Points
    16 673
    Par défaut
    Salut
    Dans l’exemple
    ConnDataBase est une variable de type ADODB.Connection
    MeRecordset1 et MeRecordset2 sont des variables de type ADODB.Recordset
    ConnDataBase est initialisé, en dehors du code proposé
    NoClient est considéré comme champs numérique
    NoCommande est considéré comme champs String

    Je n’ai pas peu vérifier/débuguer le code, il m’aurait fallut créer une BD spécial, par contre les lignes proposées sont un copier/coller adaptées avec tes informations, il ne devrait pas y avoir trop de faute de fonctionnement, l’intérêt étant surtout d’avoir un principe de solution de ton problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Dim Sql As String
    'Pour n'obtenir que les enregistrements qui ont pour NoClient et NoCommande différents, sans doublon
    'ce qui limitera le bouclage
    Sql = "Select DISTINCT NoClient, NoCommande from Commande Order By NoClient, NoCommande"
    'ouverture du 1° recordset qui ne servira qu'à la lecture
    MeRecordset1.Open Sql, ConnDataBase, adOpenStatic, adLockPessimistic
    If Not MeRecordset1.EOF Then
     Do While Not MeRecordset1.EOF
        'pour obtenir le/les enregistrements correspondant au NoClient et NoCommande, avec doublons éventuels
        Sql = "Commande werhe NoClient = " & MeRecordset1.Fields("NoClient") & _
            " And NoCommande = '" & MeRecordset1.Fields("NoCommande") & _
            "' Order By NoClient, NoCommande, Prix"
        'ouverture du 2° recordset
        MeRecordset2.Open Sql, ConnDataBase, adOpenStatic, adLockPessimistic
        'MeRecordset2 ne peut être que Not MeRecordset2.EOF puisque il existe dans MeRecordset1
        If MeRecordset2.RecordCount >= 2 Then
            'la condition étant vraie ......
            MeRecordset2.MoveNext 'ce place sur le 2° enregistrement
            'ou si il peut y avoir plus de 2 enregistrements et que c'est le dernier qui doit prendre pour valeur 0
            'MeRecordset2.MoveLast 'ce place sur le dernier enregistrement
            If MeRecordset2.Fields("Prix") <> 0 Then
                MeRecordset2.Fields("Prix") = 0 'modification/actualisation
                MeRecordset2.Update 'enregistrement de la modification
            End If
        End If
        MeRecordset2.Close
       'passe a l'enregistrement suivant, qui ne peut être de même NoClient et NoCommande
       'car ce recordset a été ouvert avec la clause DISTINCT
       MeRecordset1.MoveNext
       DoEvents
     Loop
     MeRecordset1.Close
    End If
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Sincères remerciements pour ces explications qui ont contribué à mon apprentissage et surtout à faire en sorte que cela fonctionne.
    Merci au forum et à tous ceux qui contribuent à améliorer notre savoir

    Cordialement
    Astragale

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 21/01/2009, 08h32
  2. Comparaison entre deux variables
    Par delavega dans le forum ASP
    Réponses: 8
    Dernier message: 23/11/2006, 16h42
  3. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  4. Réponses: 6
    Dernier message: 18/04/2006, 13h11
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo