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

Requêtes et SQL. Discussion :

Problème inhérent au séparateur décimal dans un UPDATE


Sujet :

Requêtes et SQL.

  1. #1
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut Problème inhérent au séparateur décimal dans un UPDATE


    Je dispose de trois tables T_DevisFact, T_PostProduction, T_PriseDeVues. Elles sont jointes par le champ CodeDevis.
    Le champ TotalDevis est donc le Cumul des deux champs TotalPostProd et TotalPdV. Ces trois champs sont de type "monétaire"

    Je mets à jour via un requête UPDATE le TotalDevis suivant la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub CalculMontantDevis(NumDevis As Long)
        Dim l_curTotalPostProd As Variant, l_curTotalPdV As Variant
     
        l_curTotalPostProd = CVar(Nz(DSum("TotalRetouche", "T_PostProduction", "CodeDevis = " & NumDevis), 0))
        l_curTotalPdV = Nz(DSum("MontantPdV", "T_PriseDeVues", "CodeDevis = " & NumDevis), 0)
        ' Mise à jour de la table T_DevisFact
        l_strSql = "UPDATE T_DevisFact SET MontantDevis = " & l_curTotalPdV + l_curTotalPostProd & " WHERE CodeDevis = " & NumDevis
        Debug.Print l_strSql
        CurrentDb.Execute l_strSql, dbFailOnError
        ' Mise à jour du Sous-Formulaire de la liste des devis du Client
        Forms.F_Gestion.lstDevisFact.Requery
     
    End Sub
    J'ai toujours une erreur lors de l'exécution de la requête :
    Erreur de Syntaxe dans l'instruction UPDATE
    J'ai donc inclus une instruction Debug.Print dans le code. Ce qui me donne le résultat suivant :
    UPDATE T_DevisFact SET MontantDevis = 642,8572 WHERE CodeDevis = 22
    On peut donc se rendre compte que malgré le type de données, le séparateur décimal est une virgule. Et c'est là, le problème. () Il me semblait que lors de l'exécution de VBA, le séparateur était automatiquement remplacé par un point.
    Je ce comprends pas, je tourne en rond depuis deux jours. Les options de régionales correspondent bien au séparateur "virgule".

    Si vous avez une idée, je suis preneur.
    Merci beaucoup à tous
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour Jean,

    C'est en effet une bizarrerie quand on construit la chaîne sql avec des nombres à virgule.

    As-tu essayé de remplacer la virgule par le point avec la fonction Replace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_strSql = "UPDATE T_DevisFact SET MontantDevis = " & Replace(l_curTotalPdV + l_curTotalPostProd, ",", ".") & " WHERE CodeDevis = " & NumDevis

    Bon dimanche
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour Jeannot45,
    Je ce comprends pas, je tourne en rond depuis deux jours. Les options de régionales correspondent bien au séparateur "virgule".
    c'est justement l'application des paramètres régionaux dans VBA qui, malheureusement, provoque cet effet pervers: les nombres, les dates et les phrases SQL sont "régionalisées" et, du coup, sont mal interprétés dans VBA qui ne connait que le point en séparateur de décimales, le format US pour les dates et la virgule comme séparateur de champs.
    Il faut donc "dé-régionaliser" les données pour que VBA les interprète correctement.
    Du coup, Str fonctionne toujours, même 6 ans après ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Merci beaucoup à vous deux !
    Comment n'ai-je pas penser à Replace()

    Tout fonctionne parfaitement.
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour Jeannot45,

    c'est justement l'application des paramètres régionaux dans VBA qui, malheureusement, provoque cet effet pervers: les nombres, les dates et les phrases SQL sont "régionalisées" et, du coup, sont mal interprétés dans VBA qui ne connait que le point en séparateur de décimales, le format US pour les dates et la virgule comme séparateur de champs.
    Il faut donc "dé-régionaliser" les données pour que VBA les interprète correctement.
    Du coup, Str fonctionne toujours, même 6 ans après ...
    Bien vu tee_grandbois pour la fonction str().

    La réponse avait été donnée à l'époque par ledzeppII, une valeur sûre

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

Discussions similaires

  1. [WD12] Séparateur décimal dans une table
    Par devste dans le forum WinDev
    Réponses: 3
    Dernier message: 16/01/2009, 17h20
  2. [CR XI] Problème de formatage de décimal dans une formule
    Par Jsh dans le forum Formules
    Réponses: 7
    Dernier message: 25/02/2008, 22h43
  3. Séparateur décimal dans une formule
    Par Tonton Phil dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2007, 11h45
  4. Réponses: 3
    Dernier message: 11/09/2006, 14h25
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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