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 :

Probleme avec l'Unicode et Non Unicode dans la meme table


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut Probleme avec l'Unicode et Non Unicode dans la meme table
    bjr:
    j'ai enregistrer deux enregistrements dans une table Paradox, le premier en francais et l'autre en arabe, mais le probleme c'est que le deuxieme s'enregistre comme des (?)
    j'ai trouve dans le net que ce probleme se resoudre avec l'utilisation de UTF8 mais je ne comprends pas comment
    Merci bcp

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Paradox ne gère pas l'UTF8, il ne gère que l'AnsiString, tu peux jouer avec les fonctions UTF8Encode et UTF8Decode, mais il faut manuellement géré la récupération des valeurs dans OnGetText par exemple si tu veux encore utilisé des composants DB tel que des TDBGrid !

    Sinon il faut utiliser des composants UniCode comme TNT, qui va gérer correctement l'affichage !

    D'ailleurs Delphi combien ? 1 à 2007 ou 2009+ ?
    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

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    bsr ShaiLeTroll;
    - je programme avec delphi 2009
    - j'ai deja utilise les fonctions UTF8Encode et UTF8Decode mais sans resultat
    - qu'est ce que vous voulez dire par la récupération des valeurs dans OnGetText?
    Merci bcp.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Si tu es sous Delphi 2009, tu as déjà toute la VCL en UniCode !

    As-tu regardé le contenu des Tables Paradox via le Module de Base de Donnés ou Explorateur SQL
    Si tu n'as pas tous les raccourcis (cela arrive), tu peux trouver ça dans
    C:\Program Files\Fichiers communs\CodeGear Shared\Database Desktop
    C:\Program Files\CodeGear\BDS\?.0\bin\dbexplor.exe

    Normalement, tu manipules que des String qui sont en fait des UniCodeString en UTF16
    Sauf que l'ami Paradox ne connait que le Window1252 (presque latin1) et les autres CharSet 8 Bit, selon la langue de l'OS et la langue de compatibilité, tu pourras gérer soit du Français soit de l'arabe mais pas les deux en même temps pour une application non UniCode, normalement en 2009, tu n'as plus ces problèmes, tu peux avoir les deux langues ensembles dans l'application, mais par contre Paradox lui ne connait pas la langue car il reste toujours en 8Bits (il ne peut en gérer qu'une à la fois)

    Je n'ai pas encore utilisé la DB sous les versions UniCode de Delphi, donc j'ignore les nouveautés

    Comment écris-tu les chaines ?
    En Code ?
    Via DBEdit ?

    Pense à la propriété DBEdit.Font.CharSet avec les valeurs DEFAULT_CHARSET et ARABIC_CHARSET, normalement, tu n'as pas besoin d'y toucher, le AnsiString ou UTF8String sont traduits en UTF16 lors de l'affectation à une UniCodeString (propriété Text, DisplayText...)

    Pour UTF8Decode et UTF8Encode, tu dois utiliser la propriété AsAnsiString car en fait un le type UTF8String c'est juste une AnsiString utilisé avec le code page UTF8, pour éviter les conversions c'est plus prudent !

    ne pas utiliser AsWideString avec Paradox !
    Pour AsString, la doc est un peu foireuse à ce sujet, cela parle d'AnsiString alors que le prototype est UnicodeString, à éviter aussi !

    Pour OnGetText, c'est un évènement du TField, mais oublie, avec 2009, tu ne devrais pas avoir en besoin !
    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 du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Merci bcp ShaiLeTroll pour votre attention;
    - pour le contenu des Tables Paradox c'est juste des (?)
    - t'as raison, delphi 2009 a resolu le probleme de deux langues dans la meme application, mais le probleme reste toujour en paradox
    - j'ecris les chaines dans la table en code
    - pour les fonctions UTF8Encode et UTF8Decode marchent tres bien en delphi 7 mais pas du tout en delphi 2009

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    j'ai resolu le probleme avec ce code:

    l'enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    table1.DatabaseName:='d:\';
                   table1.TableName:='tab';
                   table1.Active:=true;
                   table1.Edit;
                   table1.FieldByName('champ').AsAnsiString:=utf8encode(edit1.Text);
                   table1.Post;
    end;
    l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    table1.DatabaseName:='d:\';
                   table1.TableName:='tab';
                   table1.Active:=true;
                   edit2.Text:=utf8decode(table1.FieldByName('champ').AsAnsiString);
    end;
    mais le probleme maintenant existe dans les composant DB (dbgrid, dbedit, ...) affichent tjr des caracteres speciaux

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Ce que je voudais dire avec OnGetText, tu vas devoir manuellement, pour chaque colonne texte, tu vas devoir traduire utf8decode

    un code ressemblant à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.FieldByName('champ').OnGetText = FieldGetTextEventHandler;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FieldGetTextEventHandler(Sender: TField; var Text: string; DisplayText: Boolean);
    begin
      //if DisplayText then // a tester !
        Text := utf8decode(Sender.AsAnsiString);
    end;
    Et lors du table1.OnBeforePost si tu utilise des DBEdit pour modifier, tu vas devoir encoder avec utf8encode !
    Cela pourra être pénible !

    Vérifie aussi les autres fonctions UT8ToString, UTF8ToWideString, ... tu as plein de nouvelle variante avec BSD2009 comme tu pourras combiner avec AsString et AsWideString ce qui coup ci !

    utf8decode n'est elle pas deprecated ?
    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 du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Merci bcp ShaiLeTroll, vraiment...t'es tres gentil

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

Discussions similaires

  1. [VB6] Probleme avec initialisation d'un Data ADO dans form Load
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/06/2006, 22h41
  2. Problème avec K3B : graveur DVD non reconnu
    Par HNT dans le forum Applications et environnements graphiques
    Réponses: 11
    Dernier message: 20/03/2006, 10h50
  3. Probleme avec la roulette de la souris dans VBE
    Par GESCOM2000 dans le forum Access
    Réponses: 3
    Dernier message: 04/02/2006, 16h53
  4. Réponses: 3
    Dernier message: 24/02/2005, 15h48
  5. Réponses: 3
    Dernier message: 26/01/2004, 17h59

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