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

Projets ADP Discussion :

ODBC Access et MYSQL probleme TYNYINT


Sujet :

Projets ADP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut ODBC Access et MYSQL probleme TYNYINT
    Bonjour

    L'interface utilisateur va chercher ses données dans access (je ne peux pas modifier les sources de cette interface).
    J'aimerai que les données soit accessible sur MySql.

    Pour cela j'ai:
    Transferé les données de la base de données access vers une base MySql.
    Détruis la base de données access
    crée une nouvelle base du meme nom que l'ancienne
    par l'intermédiaire des liaisons ODBC la nouvelle base access va chercher ses données sur la base MySql.

    Ca marche sauf que dans MySql j'ai des champs TINYINT(1) qui se retrouvent comme étant des champs numérique dans access au lieu d'etre booleen.

    Du coup quand l'appli utilisateur fait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MonChamp!MaVariable = True then
    Ca plante forcement puisque MonChamp!MaVariable est egal a 0 ou 1

    Comment puis je contourner le problème?

    Merci d'avance

    PS: Désolé si je n'ai pas posté au bon endroit, celui ci m'a paru le plus approprié, qu'un modérateur me déplace le topique si je me suis trompé.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Les booleens en Access peuvent aussi être vus comme des entiers.

    Les valeurs valides sont 0 pour faux et -1 pour vrai.

    Si tu codes tes vrais comme des -1 en MySQL tu devrais pouvoir utiliser les constantes figuratives True et False normalement. Access va faire la conversion de lui-même.

    Si tu le peux, je t'invite à mettre une contrainte sur ton champ MYSQL pour s'assurer de n'avoir que 0, -1 ou Null comme valeur.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    L'interface utilisateur va chercher ses données dans access (je ne peux pas modifier les sources de cette interface).
    J'aimerai que les données soit accessible sur MySql.
    Je trouve ça gonflé ! mais dangereux aussi . Tu risques d'avoir des différences de code SQL auxquelles tu ne pourra rien faire. Si l'application Access envoie un SLQ avec une procédure VBA par exemple, ou bien des crochets autour des noms d'entités, tu as quoi comme parade ?

    Pour la petite histoire, j'ai eu hier un problème de champ défini en TinyInt(2) en provenance de MySql ! Ce champ semblait bien être du booléen, mais dans mon cas ce n'était pas gênant, je l'ai mis en Integer du coté Access en attendant mieux. Je n'ai pas encore terminé ce travail (je passe trop de temps ici!) et je n'ai pas encore vu passer ce champ avec une valeur différente de zéro. Je suppose que l'espace défini à 2 dans ce cas est prévu pour afficher le symbole de la négation. Ce qui pourrait bien être ta solution.

    Pour ton problème, vérifie que ton type TINYINT est bien signé et vérifie que tu as bien envoyé -1 pour True lors de la conversion. Comme le dit Marot définir un Enum sous MySql avec les valeurs explicites -1, 0 et Null ne serait pas du luxe.

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,
    Citation Envoyé par gilles_906 Voir le message
    ...dans MySql j'ai des champs TINYINT(1) qui se retrouvent comme étant des champs numérique dans access au lieu d'etre booleen.

    Du coup quand l'appli utilisateur fait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MonChamp!MaVariable = True then
    Ca plante forcement puisque MonChamp!MaVariable est egal a 0 ou 1

    Comment puis je contourner le problème?
    Tu pourrai envisager de convertir le champ typé TINYINT en booléen avec CBool, lorsque tu y fais référence en vba.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CBool(MonChamp!MaVariable) = True then
    CBool(0) -> False
    CBool(valeur autre que 0) -> True

    A+

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Merci a tous les trois de vos réponses.

    marot_r
    Les booleens en Access peuvent aussi être vus comme des entiers.

    Les valeurs valides sont 0 pour faux et -1 pour vrai.
    Ca je ne le savais pas, c'est peut être bien la solution. Je test et reviendrai donner la réponse.

    Si tu codes tes vrais comme des -1 en MySQL tu devrais pouvoir utiliser les constantes figuratives True et False normalement. Access va faire la conversion de lui-même.
    Je peux faire un bout de code qui va me les convertir, ce n'est pas un soucis.
    J'espere par contre qu'access m'enverra des -1 pour vrai lors des insertions


    mumen
    Tu risques d'avoir des différences de code SQL auxquelles tu ne pourra rien faire. Si l'application Access envoie un SLQ avec une procédure VBA par exemple, ou bien des crochets autour des noms d'entités, tu as quoi comme parade ?
    Normalement pas de soucis, puisque l'on a une liaison, c'est le connecteur odbc qui fait la transcription. Acces ecrit dans les tables comme a son habitude et ne voit pas la différence.


    LedZeppII
    Tu pourrai envisager de convertir le champ typé TINYINT en booléen avec CBool, lorsque tu y fais référence en vba.
    Je n'ai pas acces aux source de l'appli cliente je n'ai acces qu'a la base access, et encore qu'en lecture. C'est l'appli cliente qui fait les écritures.

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Citation Envoyé par LedZeppII
    Tu pourrai envisager de convertir le champ typé TINYINT en booléen avec CBool, lorsque tu y fais référence en vba.
    Je n'ai pas acces aux source de l'appli cliente je n'ai acces qu'a la base access, et encore qu'en lecture. C'est l'appli cliente qui fait les écritures.
    Désolé, j'avais pas compris le contexte.

    La proposition de marot_r me paraît être la bonne.
    Dans VBA les booléens sont stockées sous la forme d'entiers signés, sur deux octets (type vba Integer).
    Si tu modifies ton champ en type entier signé 16-bit (SMALLINT) et que tu n'y mets que 0 ou -1, ça devrait fonctionner.

    A+

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Me revoila pour le résultat:

    Cela fonctionne

    LedZeppII
    Un TYNYINT(1) suffit il va de -128 à 127 s'il est signé et ca prend moins de place.


    Par contre j'ai un soucis au niveau de la liaison ODBC, je m'explique:
    Une frontale (je ne peux pas toucher au code)
    Une dorsale (Contient des liaisons de table avec MySql)
    Une base MySql qui contient réellement mes tables.

    Si j'ouvre une table de la dorsale je voie toutes les données, donc ma liaison ODBC avec mysql est bonne.

    Par contre ma frontale n'arrive pas a se connecter sur la dorsale.
    J'ai le message suivant:
    Le moteur Jet ne peut pas trouver la table ou la requête source "TAdresse". assurez vous quelle existe
    Mon probleme aurait été résolu facilement si j'avais pu relier directement la frontale et la base mysql.

    Quelqu'un a t il une idée?

    Merci d'avance

    Edit: pour résumer la frontale ne voie pas les tables de la dorsale.

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Il me semble qu'on ne pas lier une table liée.
    Dans Access, quand tu utilises l'assistant pour lier des tables, tu verra qu'il ne propose pas les tables liées.
    Ce que tu appelles dorsale est en fait une frontale car elle contient des tables liées (table liées ODBC).

    Si ta frontale n'est pas complètement verrouillée (d'un point de vue interface utilisateur), il faudrait tenter de recréer les tables liées, de manière à remplacer les tables liées Access par les tables liées MySQL.

    A+

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Bonjour
    LedZeppII

    En désespoir de cause c'est ce que j'ai fais, car effectivement j'ai bien l'impression qu'on ne peut pas lier des tables lier.

    Merci de votre aide a tous.
    Gilles

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

Discussions similaires

  1. [AC-2007] Conflit d'écriture liaison ODBC Access vers MYSQL
    Par wolfens77 dans le forum Access
    Réponses: 4
    Dernier message: 05/12/2016, 09h47
  2. [AC-2007] Probleme ODBC Access - Mysql
    Par bibigonzales31 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 19/04/2012, 16h07
  3. Réponses: 12
    Dernier message: 08/10/2007, 17h36
  4. Réponses: 0
    Dernier message: 05/10/2007, 10h04
  5. mysql / odbc / access
    Par amandine_drooplette dans le forum Installation
    Réponses: 3
    Dernier message: 07/06/2007, 09h13

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