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

Delphi Discussion :

DB Express - Base de données MySQL - champ TinyInt(1) typé comme champ ShortInt au lieu de boolean


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut DB Express - Base de données MySQL - champ TinyInt(1) typé comme champ ShortInt au lieu de boolean
    Bonjour,

    je viens d'acquérir delphi 10.2.3 et je suis en train de convertir mes applications de Delphi 2009 vers cette nouvelle version.
    J' utilise les composants DB Express pour accéder aux base de données MySQL.

    Je rencontre un problème important, les champs mySQL de type tinyint(1) mappé en TBoolenfield sous Delphi 2009 sont maintenant mappé comme TShortIntField, ce qui pose beaucoup de problèmes.

    J' ai trouvé une solution avec les pilotes DevArt pour DBExpress / MySQL mais cela ne me satisfait pas dans le sens où ces derniers sont payants et peuvent apporter des problèmes que je n' avais pas.

    J' aimerai donc savoir commet puis je mapper les champs de type TinyInt en TBooleanField.

    Merci pour votre aide.

    Mauricio

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour Mauricio

    As-tu tenté de forcer le type des champs en les décrivant dans tes TSQLTable ou TSQLQuery ?
    Sinon, au pire, tu peux toujours tenter un champ calculé, mais c'est pas génial.

    En passant à FireDAC au lieu de rester sur dbExpress tu peux aussi forcer le nappage de champs directement au niveau des options de ta connexion.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par pprem Voir le message
    Bonjour Mauricio

    As-tu tenté de forcer le type des champs en les décrivant dans tes TSQLTable ou TSQLQuery ?
    Sinon, au pire, tu peux toujours tenter un champ calculé, mais c'est pas génial.

    En passant à FireDAC au lieu de rester sur dbExpress tu peux aussi forcer le nappage de champs directement au niveau des options de ta connexion.
    Salut,

    merci pour ta réponse.
    Malheureusement, je ne peux pas forcer car le mapping est fait en interne lors de l'ouverture et si le type de champ n' est pas le même, ça buggue ...
    Pour les champs calculés, c' est pas top.

    Je suis parti pour l' instant sur le driver DB Express MySQL de DevArt.com qui a l' avantage d'avoir l' option de mapping des champs de type TinyInt(1) mais aussi d' être compatible mySQL 8.

    Je suis quand même preneur s' il existe une solution simple.

    a+

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Dommage que l'écart de version soit si important, cela mériterait de faire un Cas sur QualityCentral si cela avait sur deux versions proches, maintenant c'est trop tard
    C'est pénible de changer de version de Delphi et de voir qu'un comportement a changé
    Par contre, tu dois pas être le seul à avoir eu ce problème

    J'ai travaillé avec MySQL et MyDAC, idem, le TinyInt(1) en Booleen c'est fort pratique, cela me manque en ORACLE ou le code est plus lourd.
    D'ailleurs MyDAC est nettement plus confortable que DB Express que j'ai aussi expérimenté mais sur Sybase
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Dommage que l'écart de version soit si important, cela mériterait de faire un Cas sur QualityCentral si cela avait sur deux versions proches, maintenant c'est trop tard
    C'est pénible de changer de version de Delphi et de voir qu'un comportement a changé
    Par contre, tu dois pas être le seul à avoir eu ce problème

    J'ai travaillé avec MySQL et MyDAC, idem, le TinyInt(1) en Booleen c'est fort pratique, cela me manque en ORACLE ou le code est plus lourd.
    D'ailleurs MyDAC est nettement plus confortable que DB Express que j'ai aussi expérimenté mais sur Sybase
    Salut,

    je vais basculer progressivement vers FireDAC.
    J' ai téléchargé le driver DBExpress pour mySQL de DevArt.Com et il suffit d'ajouter dans la propriété params la valeur suivante:
    EnableBoolean=True

    Se serait bien qu' il y ait une option dans ce sens mais je n' ai pas trouvé.

    Merci en tout cas pour ton commentaire.

    Mauricio


    J' en profite pour vous donner le lien vers mes compos gratuits:
    https://sourceforge.net/projects/tcycomponents/

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    pourquoi ne pas modifier les composants DBExpress de votre version ?
    Lors de la sortie de Firedac c'est souvent ce que Dimitry Arefiev proposait lorsqu'on lui signalait un problème Firedac, il indiquait l'endroit et le code à remplacer.
    Les précautions sont bien sûr de sauvegarder le source initial avant. Puis, ensuite, une réinstallation du composant s'impose. Il fallait bien sûr prendre garde aux mises à jour mais 10.2.3 ne va plus évoluer donc pas de soucis d'écrasement.

    AMHA c'est l'unité Data.SQLExpr qui est à modifier, à partir des lignes 74-105 se trouve tout ce qui semble concerner le mapping, comparer cette version avec celle d'une version D2009 devrait donner les clé nécessaires

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Sans même modifier l'original, dans un autre répertoire, faire une copie modifiée de Data.SQLExpr, en l'incluant au projet, elle remplace celle de Delphi
    Je l'ai pratiqué en D7 pour les couches SOAP
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Sans même modifier l'original, dans un autre répertoire, faire une copie modifiée de Data.SQLExpr, en l'incluant au projet, elle remplace celle de Delphi
    Je l'ai pratiqué en D7 pour les couches SOAP

    En fait non, car en design time les champs sont déjà déclaré.
    J' avais l'habitude de modifier le source original si besoin mais comme je le disais, j' ai acheté le driver de devArt.Com ...
    De plus, je n' ai pas trouvé quoi modifier sachant que c' est une particularité MySQL.

    Mauricio

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par mauriciopt Voir le message
    En fait non, car en design time les champs sont déjà déclaré.
    Ah mince, c'est vrai que je n'utilise quasiment jamais le champs persistent d'un Query.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Dommage que l'écart de version soit si important, cela mériterait de faire un Cas sur QualityCentral si cela avait sur deux versions proches, maintenant c'est trop tard
    C'est pénible de changer de version de Delphi et de voir qu'un comportement a changé
    Par contre, tu dois pas être le seul à avoir eu ce problème
    En fait il n'est jamais trop tard pour signaler les régressions qui posent problème. Embarcadero est quand même dans une optique de pérennité des programmes développés et pourra ainsi proposer une alternative ou corriger la partie qui devrait l'être.

    S'ils n'ont pas conscience d'un problème, ils ne risquent pas de corriger le tir.

  11. #11
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par pprem Voir le message
    En fait il n'est jamais trop tard pour signaler les régressions qui posent problème... S'ils n'ont pas conscience d'un problème, ils ne risquent pas de corriger le tir.
    Eh bien c'est effectivement une bonne chose qu'Embarcadero assure encore la non-regression des versions de l'époque de CodeGear pour ajouter des corrections dans les nouvelle versions
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour Mauricio

    ce matin en faisant quelques recherche sur Firebird je suis tombé par hasard sur cette astuce dans le wiki de Lazarus

    Boolean data types
    Firebird versions below 3.0 do not support boolean data types.

    Use a DOMAIN that uses a SMALLINT type (other integer types may work as well - please test and adjust text):
    CREATE DOMAIN "BOOLEAN"
    AS SMALLINT
    CHECK (VALUE IS NULL OR VALUE IN (-1,0,1))
    /* -1 used for compatibility with FPC SQLDB; 1 is used by many other data access layers */
    ;

    Let your field/column use this domain type e.g.
    CREATE TABLE MYTABLE
    (
    ...
    MYBOOLEANCOLUMN "BOOLEAN",
    );
    Now you can use .AsBoolean for assigning field values etc
    Bonne journée
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour Mauricio

    ce matin en faisant quelques recherche sur Firebird je suis tombé par hasard sur cette astuce dans le wiki de Lazarus



    Bonne journée


    Bonjour,

    je ne sais pas si cela pourrait marcher avec MySQL mais de toute façon, je dois rester compatible avec des dixaines de clients avec les versions compilées sous Delphi 2009.
    La meilleure solution a été d' acheter le driver DBExpress de DevArt, franchement ça vaut le coup.
    Je n' ai eu que 2 soucis :
    SELECT MIN(ChampNormalementBooleen) renvoi un champ de type entier

    De même, l' utilisation de UNION fait annuler le type booléen sur un champ:
    SELECT ChampNormalementBooleen FROM TABLE1
    Renvoie bien un champ TBooleanField, par contre:
    SELECT ChampNormalementBooleen FROM TABLE1
    UNION
    SELECT ChampNormalementBooleen FROM TABLE2
    renvoi un champ de type entier.


    Mauricio

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2008, 10h25
  2. Réponses: 0
    Dernier message: 19/08/2008, 09h49
  3. probleme construction base de donnes MySql...Help
    Par chakan dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2004, 11h27
  4. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 12h31
  5. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 10/03/2004, 23h47

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