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 :

Bug de vb6 ou erreur de programmation?


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    programmeur / analyste
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : programmeur / analyste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut Bug de vb6 ou erreur de programmation?
    Bonjour tout le monde!

    J'ai un drôle de bug dans mon code et je me demande si ce n'est pas un problème de VB. Je m'explique:

    Pour commencer, mes paramètres régionaux sont sur Français Canada.

    Voici mon bout de code:
    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
     
    With m_oParent.fxgServiceLines
     
            For iRow = 1 To .Rows - 1
     
                'Find the current line.
                If .TextMatrix(iRow, miPHONE_NUMBER_COL) = m_oPhoneLine.PhoneNo And _
                   .TextMatrix(iRow, miSTART_DATE_COL) = m_sStartDate And _
                   .TextMatrix(iRow, miEND_DATE_COL) = m_sEndDate Then
     
                    'XXX l'erreur est le If.
                    If .TextMatrix(iRow, miIN_SERVICE_COL) And CDate(m_sStartDate) <= Date Then
     
                    '
                    ' Code à exécuter
                    '
                    End If
     
            Next iRow
     
     End With
    L'erreur ce situe au niveau du If (sous le commentaire 'XXX l'erreur...). Cela génère une erreur de type mismatch. Par contre, lorsque je change mes paramètre régionaux pour Anglais Canada, il n'y a plus d'erreur.

    Mais, le pire ne vient pas des paramètre régionaux. Lorsque je mets les arguments du If dans des variables avant, tout fonctionne peut importe le paramètre régionaux choisi. Voici le code où tout fonctionne bien:

    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
     
    With m_oParent.fxgServiceLines
     
            For iRow = 1 To .Rows - 1
     
                'Find the current line.
                If .TextMatrix(iRow, miPHONE_NUMBER_COL) = m_oPhoneLine.PhoneNo And _
                   .TextMatrix(iRow, miSTART_DATE_COL) = m_sStartDate And _
                   .TextMatrix(iRow, miEND_DATE_COL) = m_sEndDate Then
     
                    'XXX mettre argument du If dans variables
                    Dim matrix As Boolean
                    Dim dte As Boolean
     
                    matrix = .TextMatrix(iRow, miIN_SERVICE_COL)
                    dte = CDate(m_sStartDate) <= Date
     
                    'XXX  ancien If qui produit l'erreur.
                    'If .TextMatrix(iRow, miIN_SERVICE_COL) And CDate(m_sStartDate) <= Date Then
     
                    'XXX nouveau If, tout est OK!
                    If matrix And dte Then
                    '
                    ' Code à exécuter
                    '
                    End If
     
            Next iRow
     
     End With
    le If de cette façon façon fonctionne aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If matrix And CDate(m_sStartDate) <= Date Then
    mais pas de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If .TextMatrix(iRow, miIN_SERVICE_COL) And dte Then
    Notez que 'fxgServiceLines' est un flexgrid

    Quelqu'un à une idée car je trouve ça très bizarre ce genre de comportement.

    Merci à tous,

    mr. Bungle

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Montre-nous (commentaires) ce qu'est supposée faire cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .TextMatrix(iRow, miIN_SERVICE_COL) And CDate(m_sStartDate) <= Date Then
    en nous disant (passe en mode debug pour le savoir) ce que contiennent :
    .TextMatrix(iRow, miIN_SERVICE_COL)
    et
    m_sStartDate
    lorsque "ça plante"
    S'il te plait.

    Déjà (et pour que tu commences à comprendre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A = 3
     B = 2
     MsgBox A And B
     If A And B <= 5 Then MsgBox "oui" ' affichera oui car A and B = 2
    Dans le code ci-dessus : qu'aurais-tu voulu dire s'il était de toi ?

    - comparer A and B à Date ? If (A and B) <= 5
    - comparer B à date si A ? If A and (B <=5)

    J'ai mis des parenthèses pour éviter toute confusion possible sur tes réponses

    Sans préjudice du reste dans le cas qui te concerne, puisque, en plus, tu compares avec une date ....

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Par défaut
    bonsoir,
    Envoyé par mrbungle

    J'ai un drôle de bug dans mon code et je me demande si ce n'est pas un problème de VB. ..
    ]
    Non,c'est trop facile d'incriminer VB quand il y a une erreur.
    et heureusement que VB la donne ('mismatchou autre),c'est la preuve qu'il ne laisse pas faire n'importe quoi.

    Un peu d'humilité en programmation car ton erreur doit se trouver dans tes paramètres ou constantes données au début puisque ça fonctionne à un moment et pas à un autre.
    mismach ,si je ne me trompe, veut dire qu'il y a conflit quelque part,
    donc dans les informations que tu donnes et c'est là qu'il faut chercher
    à mon avis mais ... je peux me tromper.

    .

  4. #4
    Membre averti
    Homme Profil pro
    programmeur / analyste
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : programmeur / analyste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut
    En fait, voici ce que vaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .TextMatrix(iRow, miIN_SERVICE_COL) And CDate(m_sStartDate) <= Date Then
    .TextMatrix(iRow, miIN_SERVICE_COL) = false

    CDate(m_sStartDate) m_startDate est une String et vaut ("2009-04-16")

    Date est un type date et vaut 2009-04-16

    En passant, .TextMatrix est une cellule dans un flexgrid dont iRow = 1 et miIN_SERVICE_COL = 5 et elle contient une valeur boolean.

    Merci :-)

  5. #5
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Par défaut
    Salut,
    déjà commence par mettre des paranthèse afin de séparer correctement les différents tests de ton IF
    (je ne suis pas sure que le "AND" soit calculer après le "<=")
    ensuite, il existe des fonctions spéciale pour les comparaisons de date, "datediff" par exemple, qui te donera un résultat beaucoup plus cohérent qu'un simple "<="
    (2009-04-16 peut être inférieur, supérieur ou égale a 2009-04-16 selon les heures (pas forcément affiché) de ces dates ..., datediff te donnera un résultat correct)

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re,

    sans compter que le premier réflexe peut toujours être un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
     Dim toto As String
     toto = "2009-04-16"
     If toto <= Date Then MsgBox "oui" ' ne s'affichera pas
    End Sub
    alors que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command2_Click()
     Dim toto As String
     toto = "2009-04-16"
     If CDate(toto) <= Date Then MsgBox "oui" 's'affichera
    End Sub

Discussions similaires

  1. ancien programme en vb6 genere erreur '429'
    Par totototo2000 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/11/2011, 14h50
  2. [VB6][Crystal]Erreur de syntaxe aléatoire
    Par Erastide dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/11/2007, 15h41
  3. [VB6-Access]Erreur de champ inconnu
    Par Xan dans le forum Langage SQL
    Réponses: 10
    Dernier message: 13/04/2006, 17h24
  4. [VB6-Access]Erreur de champ inconnu
    Par Xan dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2006, 17h15
  5. [VB6] + CR : ERREUR 20535:Connexion impossible
    Par Aminos dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/03/2006, 16h51

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