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

IHM Discussion :

ODBC Oracle : formulaire modifie l'interprétation des champs Decimal [AC-2016]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 35
    Points
    35
    Par défaut ODBC Oracle : formulaire modifie l'interprétation des champs Decimal
    Bonjour,

    Je vous soumets un sujet très décontenançant qui mêle connexion aux bases de données et formulaires.

    J'ai une base Access administrée sous Access 2016 64 bits (mais initiée sous une version antérieure....2013 32 bits de mémoire) avec des tables liées à une BD Oracle à l'aide d'un DSN ODBC Oracle 64 bits (même phénomène sur un autre poste client en 32 bits).

    Dans le paramétrage du DSN, j'ai bien indiqué la valeur "Use US settings" au paramètre "Numeric Settings" afin que les valeurs numériques décimales affichent bien la virgule sur le SGBD client.

    Pour la faire simple, la base est constituée :
    • de tables liées à la BD Oracle grâce au DSN ODBC Oracle
    • un formulaire d'accueil avec des boutons appelant d'autres formulaires et un champ de paramètre de choix de date (utilisé dans la requête exécutée derrière le formulaire appelé par un bouton)
    • un formulaire appelé
    • ce formulaire appelé contient des sous-formulaires
    • l'un de ces sous-formulaire affiche le résultat d'une requête qui se base sur des champs numériques avec décimales


    C'est là que cela devient cocasse. Selon l'élément que j'appelle en 1er, la décimale est prise en compte ou non (un 15,7 devient 157 si KO) pour la suite de la session Access. J'ai réussi à isoler le seul scénario qui me conduit à la non-prise en compte de la décimale.

    Scénarios qui ne posent pas problème (entre chaque scénario, je ferme la base puis la rouvre pour me remettre en condition de test identiques) :
    • Ouverture de la table liée ==> Décimal OK
    • Ouverture de la requête du sous-formulaire du formulaire appelé par le bouton du formulaire d'accueil (sic!) ==> Décimal OK
    • Ouverture du sous-formulaire qui exécute la requête du scénario précédent (sans passer par le formulaire parent) ==> Décimal OK


    Scénario qui pose problème :
    • Ouverture du formulaire contenant le sous-formulaire exécutant la requête directement depuis le menu de navigation et non depuis le bouton du formulaire d'accueil ==> Décimal KO, 15,7 vaut 157 dans la somme que fait la requête


    Et donc comme je le disais précédemment, si je commence par dérouler un scénario qui fonctionne et qu'ensuite j'exécute le scénario qui ne fonctionne pas sans fermer Access entre les 2, le scénario, qui normalement ne fonctionne pas, fonctionne ! Et vis versa (si j'exécute d'abord le scénario qui ne fonctionne pas, les scénarios qui fonctionnent normalement auront le même problème de décimal tant que je reste dans la même session Access.

    Le problème semble donc se situer sur le formulaire contenant le sous-formulaire qui exécute la requête avec des décimales mais je ne comprends pas ce qui, dans un formulaire Access, peut influer sur la prise en compte ou non d'une décimale au sein d'une même session....

    3 questions :

    1. Suis-je fou ?
    2. Avez-vous une idée de ce qui peut me conduire à cette situation ?
    3. Si non, comment faire en sorte qu'au démarrage de la base, Access "simule" en premier l'un des scénarios qui fonctionne en mode silencieux (sans affichage à l'écran), par exemple l'ouverture d'une table liée contenant des décimales afin que le reste de ma session se passe correctement ?


    Un grand merci par avance pour votre aide !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Les séparateurs décimaux et les environnements multilangues (ou codage) des heures de bonheur ...

    La solution facile serait probablement de changer tes paramètres régionaux du poste pour indiquer que tu utilises le point et non la virgule.
    Il est possible que cela te pose des problèmes avec d'autres applications :-(.

    Tu pourrais peut-être aussi essayer refraichir le lien sur une de tes tables.
    Attention j'ai eu un cas où Access en voyait plus l'index et passait donc en lecture seule.
    Il a fallu que je supprime le lien et que je le recrée.

    Pour simuler l'ouverture de la table ça c'est plus simple à mon avis.
    Tu fais un formulaire basé sur ta table.
    Et tu balances :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    docmd.Openform "NomTonForm",,,,,acHidden 'ouvre le formulaire mais invisible
    docmd.close acForm, "NomTonForm" 'referme le formulaire
    avec un formulaire à l'ouverture de la BD ou l'équivalent dans une macro nommée "AutoExec".

    À la place, tu pourrais sans doute ouvrir la table et la recfermer immédiatement sans que cela ne se voit trop.
    Cela éviterai d'avoir à créer un formulaire juste pour cela.

    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 35
    Points
    35
    Par défaut
    Bonjour marot_r,

    Déjà merci de ta réponse rapide.

    Je ne l'avais pas précisé mais j'avais déjà essayé toutes les astuces que tu indiques :

    • mettre le point en séparateur décimal plutôt que la virgule (il faut tout de même laisser "Use US settings" au niveau du DSN ou repasser en "Use NLS settings" ?)
    • rafraîchir le lien d'une table liée
    • supprimer et relier une table


    Rien n'y a fait

    Pour simuler l'ouverture de la table, tu dis que je pourrais plutôt ouvrir et refermer la table aussitôt sans que cela ne se voit trop plutôt que de passer par la même chose via un formulaire. C'est exactement ce que j'aimerais faire mais comment ?

    Encore merci !

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    mettre le point en séparateur décimal plutôt que la virgule (il faut tout de même laisser "Use US settings" au niveau du DSN ou repasser en "Use NLS settings" ?)
    Je ne sais pas.

    Pour la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    docmd.opentable "NomTaTable"
    docmd.close acTable, "NomTaTable"
    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 35
    Points
    35
    Par défaut
    Ah oui par contre pas de paramètre acHidden ici pour le faire en invisible

    Je vais peut-être préféré le formulaire dans ce cas.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Oui mais fait un essai, il se peut que cela ne se voit pas ou presque pas.

    Sinon tu peux utiliser call Application.Echo(false) et call Application.Echo(true) pour figer et défiger l'écran mais je n'aime pas le résultat obtenu.

    A+

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    J'ai finalement réussi à régler le problème d'origine !

    Je suis reparti de ta solution de devoir recréer le lien de la table en le supprimant puis le recréant. Je l'avais fait sur la table associée au sous-formulaire sur lequel j'avais des données avec décimales à afficher mais je ne m'étais pas occupé des liens pointant vers les autres sous-formulaires du formulaire parent ! Je ne m'en étais pas préoccupé car je n'affichais rien de dommageable dans ces sous-formulaires, mais leurs tables respectives peuvent contenir des décimales sur d'autres champs.

    Après les avoir recréer, je n'ai plus de problème. J'en ai profité pour recréer tous les liens de la base

    Encore merci marot_r, tu m'as permis de nourrir ma réflexion sur le sujet et d'en trouver la solution

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 048
    Points : 24 636
    Points
    24 636
    Par défaut
    Bonjour,

    Ce problème de décimales est connu.

    https://www.developpez.net/forums/d1...-type-decimal/

    Cordialement,

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 35
    Points
    35
    Par défaut
    Oui mais ce n'est pas par cette solution que j'ai pu résoudre mon problème. Ici, pas besoin de la clé de registre, la simple modification du "Numeric Settings" + recréation de tous les liens aura suffit.

    J'avais d'ailleurs vu sur un autre thread de ce forum cette solution que j'avais appliqué en 1er mais je suis tombé ensuite sur mon scénario étrange. Il me manquait l'info de devoir refaire tous les liens.

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

Discussions similaires

  1. [2.x] Modifier les nom des champs dans un formulaire
    Par marwazmandar dans le forum Symfony
    Réponses: 30
    Dernier message: 27/06/2012, 18h23
  2. Modifier l'ordre des champs dans un formulaire
    Par Jeannot45 dans le forum Word
    Réponses: 3
    Dernier message: 19/06/2008, 13h23
  3. Réponses: 5
    Dernier message: 11/08/2006, 16h43
  4. [VBA-A]modifier la description des champs d'une table
    Par damiensimon dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/03/2006, 16h23
  5. Modifier le nom des champs d'une table...
    Par Mr Capone dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/01/2005, 10h22

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