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

Bases de données Delphi Discussion :

migration unicode delphi XE2


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut migration unicode delphi XE2
    Bonjour,

    je viens de migrer une application écrite sous D2007 vers Delphi XE2.
    Et bien sur se pose le problème de l'unicode !!

    La partie serveur est une base de donnée est Firebird 2.1 en code ISO 8859-1
    La partie client utilise les IBX avec ce paramètre :IbDatabase1.Params.Add ('lc_ctype=ISO8859_1')
    Cette appli ne sera jamais traduite en langue étrangère.

    La compilation se passe bien , et je n'ai pas trop de surprise , seulement des avertissements:

    [DCC Avertissement] Unit74.pas(72): W1058 Transtypage de chaîne implicite avec perte de données potentielle de 'string' en 'AnsiString'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    form3.IBQuery1COAUTRE.Value:=IBquery1.FieldByName('CTAUTRE').AsString;
    je précise que les champs COAUTRE ou CTAUTRE sont des Blob text

    j'ai l'impression que le mappage des champ persistents et différent du mappage des champ dynamique ?


    cordialement

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    Value est c'est un Variant, normalement cela gère l'UnicodeString, curieux d'avoir ce message sur cette ligne !
    utilise explicitement AsString de chaque côté

    Form3, IBQuery1, ... tu t'y retrouves avec des nommages pareils ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut réponse
    Bonjour,

    pour information:

    quand je passe la souris sur <form3.IBQuery1COAUTRE.Value> j'ai ceci en popup: DB.TMemoField
    lorsque que c'est sur: <IBquery1.FieldByName('CTAUTRE').AsString> le popup indique system.string

    Je n'ai pas l'erreur si les 2 champs sont de type string de chaque coté du signe :=


    A+

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 307
    Points : 41 796
    Points
    41 796
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Utilises AsWideString

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut réponse
    En passant la souris sur le mot Value de <form3.IBQuery1COAUTRE.Value> il m'indique system.ansistring ? D'ou l'erreur de conversion .

    résume
    sur un champ persistent:
    si IBQuery1CHAMP.Value represente une chaine est elle en system.string
    si IBQuery1CHAMP.Value represente un Tmemofield est elle en system.Ansistring

    A+

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut suite
    J'ai écrit comme on me l'a suggéré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    form3.IBQuery1COAUTRE.AsString:=IBquery1.FieldByName('CTAUTRE').AsString;
    et là plus d'erreur

    autre petite question: est ce que je dois changer ISO-8859-1 vers UTF8 coté base de donnée et coté client ou bien si l'appli reste "française" ce n'est pas nécessaire ?


    +a

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 307
    Points : 41 796
    Points
    41 796
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par looping Voir le message
    autre petite question: est ce que je dois changer ISO-8859-1 vers UTF8 coté base de donnée et coté client ou bien si l'appli reste "française" ce n'est pas nécessaire ?
    non si l'application reste "Europe occidentale" pas besoin de passer en UTF8
    les limitations de cette norme pour le français sont les lettres  Œ, œ, Ÿ  pas trop gênant et le € (celui là par contre ...)
    tu peux dans ce cas passer à l'ISO 8859-15 (je n'ai pas référence de ce dernier avec Firebird) ou WIN1252

    plus d'infos et liens

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut symbole Euro
    bonjour,

    chose bizarre, le symbole EURO fonctionnait jusqu'a maintenant ?
    Alors que je suis en Iso 8859-1 coté client et serveur.

    Comme je travaille sous Windows, est ce qu'il y a un transtypage implicite du WIN1252 ?

    merci

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    Dans le vrai Latin1 ( Iso 8859-1), le symbole Euro € n'existe pas
    Cela fait parti des extensions du Windows 1252 comme aussi le Œ œ bien utile dans cœur, œdème,
    ... en fait surtout utile lorsque l'on a bossé pendant 10 ans sur des applications médicales

    Pour le symbole €, je le stocke assez rarement dans la DB, si ce n'est jamais,
    soit c'est tout en euro, on affiche € dans les TLabel ou dans les DisplayFormat
    soit il y a une gestion de devise via un code comme EUR, USD, ... c'est les abréviations des devises ISO_4217

    Pense qu'un exe généré par 2007 est une application ANSI
    alors qu'un exe généré par XE2 est une application Unicode

    Cela a des impacts car les applications ANSI utilise un CharSet spécifique (le Windows-1252)
    La couche DB si elle transmet du Latin1, il est converti en UTF16 par le type string (UnicodeString) et plus en Windows-1252 et donc tu peux avoir des pertes remplacés par des "?"


    En C++Builder2007, lorsque l'on est passé en XE2, on a vu ce genre de problème !
    En fait nos bases SQL Anywhere, il y avait de grosses confusion entre Latin1 et cp863
    J'utilisais les ouils de Central SQL Anywhere et j'avais les accents en cp863
    Mon responsable et mon collègue utilisait plutôt SQL Explorer du BDE et voyait du Latin1
    Du grand n'importe quoi que DBExpress 2007 supportait par magie

    DBExpress XE2 lui voyait la réalité et ne supportait plus les bidouilles !
    On a carrément fait une routine de recodage des chaines pour corriger les accents lors du passage la version 2007 à la version XE2 du progiciel

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut réponse
    Bonjour,


    Ok, merci pour vos explications, je commence à comprendre maintenant.
    j'ai essayé de passer ma base en WIN1252 et j'ai retrouvé mon Euro.
    Ca devrait suffire pour mon appli qui est interne à ma société.

    Mais j'ai quand même essayé de la migrer en UTF8 mais problème ca ne marche pas:
    des chaines comme "BJÖRKHEMSGATAN " ne sont pas acceptée ? erreur: malformated string
    C'est bizarre, l'unicode est censé tout accepter.

    Mais comme c'est un problème qui concerne Firebird je vais continuer sur le forum Firebird si je ne ne trouve pas de solution.

    Cordialement

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

Discussions similaires

  1. Migration de Delphi 7 à XE2
    Par roprog dans le forum Delphi
    Réponses: 4
    Dernier message: 13/10/2014, 09h53
  2. migration delphi 2010 delphi XE2
    Par Chayanne47 dans le forum EDI
    Réponses: 1
    Dernier message: 27/04/2012, 14h09
  3. Migration VB6/Delphi, Pb avec fonte
    Par AL1986 dans le forum Delphi
    Réponses: 5
    Dernier message: 17/07/2007, 11h42
  4. Erreur après la migration de delphi 2005 vers 2006
    Par sawbo1 dans le forum Delphi
    Réponses: 2
    Dernier message: 21/07/2006, 20h18
  5. [D2005] Migration de Delphi 7 vers 2005
    Par Teb dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 19/07/2005, 13h42

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