Discussion: Comparaison Curseur et Long Integer [AC-2007]

  1. #1
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut Comparaison Curseur et Long Integer

    Bonjour a tous,

    Je souhaiterai savoir si vous avez éventuellement une idée pour résoudre mon problème.

    J'utilise dans un sous formulaire un curseur (DAO.recordset) afin de récupérer les données des différentes textbox qui s'y trouve.
    Afin de ne pas avoir de doublons dans la table ou s'effectue l'enregistrement, j'ai ajouté une condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Requete SQL pour verifier si le couple Numero_Client et TK existe déjà
    strSQLComptage = "SELECT COUNT(*) FROM [T_Justifications Clients] WHERE [Numero_client]='" & rsEnregistrements(17) & "' AND [TK]='" & Me.Txt_TK & "' AND([Date justification])=#" & DateJour & "# "
    Set rstComptage = CurrentDb.OpenRecordset(strSQLComptage)
    Malheureusement, Numero_Client est, dans la table, un Long Integer : le code me génère donc une erreur du type "Data type mismatch in citeria expression"

    Je me suis donc dit que mon curseur devait etre du type Texte
    J'ai donc modifié mon code et ajouté la fonction CLng() sur mon curseur afin de le convertir et que la comparaison s'effectue mais j'ai toujours le meme message d'erreur.

    Avez vous déjà eu le cas de figure ?

    Merci d'avance pour votre expertise

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    10 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 10 792
    Points : 21 869
    Points
    21 869

    Par défaut

    Bonjour,

    Un N° auto c'est un Long, donc dans les '.

    Par contre ici on ne voit pas ce que rsEnregistrements(17) (c'est quoi ? un tableau ?)

    En mode debug il te donne quel type ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut

    Il va m être compliqué pour l'instant de presenter mon code car McAfee bloque le bouton "Répondre a la discussion", je vois pour régler le problème avec la société...

    La champ "Numero_client" n est pas incrémenté automatiquement par Access, il est récuperé en amont dans une table "Informations clients" via l import d un Excel puis sauvegardé dans la table "Justifications client" comme clef primaire lors d une requête SQL plus bas dans mon code.

    Le bout de code que je vous ai faire parvenir fonctionnait correctement quand "Numero_client" etait au format Texte, malheureusement il me faut le mettre en Long Integer

    rsEnregistrement(17) est la position curseur a laquelle je récupère dans mon formulaire continu le numero_client

    En mode debug il m affiche rsEnregistrement(17) = 112951
    Je ne savais pas que tu pouvais voir le type, comment procédes tu?

    J ai toujours passé ma souris sur la variable... Peut être avec un espion?
    C est sûr que ca m avancerait si je pouvais checker les types de mes variables

  4. #4
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut

    Je ne connaissait pas les espions, c'est génial (oui je devrais avoir honte de ne pas les avoir utilisés avant)

    Au niveau du résultat j'obtiens :
    Numero_Client => Long

    rsEnregistrement(17) lui comprend plusieurs lignes :
    Le type de la ligne principale est object/field2
    Et en déroulant le l expression "value" qui comporte 112951, est de type variant/long

    Je vous joins le résultat en PJ
    Images attachées Images attachées  

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    10 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 10 792
    Points : 21 869
    Points
    21 869

    Par défaut

    ok je comprend mieux le rsEnregistrement(17), c'est une syntaxe permise mais vraiment pas claire. Utilise plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsEnregistrement.fields(17).value
    Se référer à un numéro ordinal d'un champ pour s'y référer, non seulement ce n'est pas clair mais imagine que ta source change -donc la position du champ- Gulp !

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsEnregistrement.fields("Numero_Client").value
    ou encore mieux si tu es sûr que ça ne changera pas souvent c'est d'utiliser une enum

    Par exemple
    Public enum
    [edit] Grrrr #@#@@@!!!! de moufle !

    Je reprends :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Enum eEnreg
     champ1
     champ2
      ...
      Numero_Client
    end enum
    Numero_Client arrive en position 17 en partant de 0.(champ1 = 0 donc le premier champ de la source).

    et dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsEnregistrement.fields(eEnreg.Numero_Client).value
    Evidemment il faut remplace champ1 champ2... par le nom des champs dans la source.
    Si un jour tu as un ajout, tu ne touches qu'à l'enum et ton code reste hyper clair même 10 ans plus tard.

    Bon bref :

    Si c'est un Long ou un quelconque numérique il ne faut pas de ' '
    Pour les dates en VBA, elles sont converties en UK, attention aux transformations sauvages.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    10 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 10 792
    Points : 21 869
    Points
    21 869

    Par défaut

    Si le problème persiste tente ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "... AND Cdbl([Date justification])=" & cdbl(DateJour) & ";"
    ça évite de se poser des questions avec le problème des dates.

    Une date n'est pas une date c'est juste un format lisible, une date c'est un double.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : novembre 2010
    Messages : 90
    Points : 42
    Points
    42

    Par défaut

    Merci pour toutes ces précisions!!

    A chaque modification dans mes forms je me retrouvais a devoir tester tous les curseurs pour retrouver mes bonnes variables

    Pour l'instant j ai repassé la clef Numero_Client en texte et supprimé les espaces qui me gênait lors de l import (je sais c est pas bien je suis faible)

    Je vais finir les modifs et revenir sur ces deux points dans les jours a venir pour que le code soit moins hasardeux lors d une modification d un champ

    Merci infiniment

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

Discussions similaires

  1. [AC-2002] Probleme avec l acces a une variable Long Integer
    Par sanaline dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/03/2013, 16h42
  2. comparaison de 2 arraylist<Integer>
    Par livinho38 dans le forum java.util
    Réponses: 7
    Dernier message: 20/05/2010, 14h57
  3. Changer le type de colonnes de Long à Integer=>Type Mismatch
    Par mathieu_r dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 13/05/2009, 17h19
  4. Réponses: 2
    Dernier message: 02/02/2006, 15h57
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

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