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 :

Transfert vers MS Excel - caractères Unicode


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut Transfert vers MS Excel - caractères Unicode
    Bonsoir,

    Je ne sais si c'est le forum adéquat mais bon :

    Je galère depuis une semaine !

    J'essaie de transférer des données d'une base FB 2.5 vers MS Excel 2007. Tout baigne sauf pour quelques champs nom et prénom en arabe.
    voici la description de la table :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE TABLE EMPLOYE
    (
      ID_EMP ID_INTEGER,
      NO_INSCR CHAR_15,
      NOM CHAR_80,
      PRENOM CHAR_80,
      NOM_AR Varchar(100) CHARACTER SET UTF8 COLLATE UTF8,
      PRENOM_AR Varchar(100) CHARACTER SET UTF8 COLLATE UTF8;
      SEXE ID_SMALLINT,
      SF ID_SMALLINT,
      DN CHAR_10,
      LN CHAR_40,
      LN_AR Varchar(100) CHARACTER SET UTF8 COLLATE UTF8;
      ADR CHAR_100,
      COMMUNE CHAR_40,
      ID_WIL_ADR ID_SMALLINT,
      TEL CHAR_20,
      MOB CHAR_20,
      FAX CHAR_20,
      EMAIL CHAR_60,
      PREN_PERE CHAR_60,
      GRADE ID_SMALLINT,
      ID_UNIV ID_SMALLINT,
      DATE_OBT DATE_1,
      USER_ID CHAR_20,
      DATE_C DATE_1,
      DATE_M DATE_1
    );

    Dés que j'exécute le transfert, Excel, évidemment n'affiche pas le résultat escompté

    J'utilise cette fonction avant d'envoyer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AnsiToUtf8(qEmp.FieldByName('NOM_AR').Value);
    ou 
    UTF8Encode(qEmp.FieldByName('NOM_AR').Value);
    Le résultat est le même !

    Envoyé : 'مليك' sur MS Excel : 'ÃßáÃ*'

    MS Excel accepte bien l'arabe et sur l'interface de mon programme, l'arabe s'affiche correctement


    J'avoue que je suis perdu ! Toute idée est la bienvenue ??

    Firebird 2.5, Delphi7, W7

  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
    Delphi 7 ça remonte !

    Quel est le CharSet des application ANSI de ton Windows ?
    Quelle bibliothèque Visuel pour afficher de l'Arabe ?
    Quelle bibliothèque DataBase pour lire de FireBird ?

    Qu'affiche ShowMessage(qEmp.FieldByName('NOM_AR').Value); ?

    C'est à partir de cette indication que l'on pourra répondre !
    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 émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    (pas sûr) teste avec charset "UNICODE_FSS" au lieu de UTF8 pour les noms et prénoms
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Dés que j'exécute le transfert
    mais le transfert est effectué avec quoi ? API ou autre méthode ? le code indiqué ne nous donne pas de piste
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Merci pour les efforts les amis !

    1. Les champs dans la base FB sont en UTF8 comme décrits.
    2. Composants visuels, des TEdit simples qui s'affichent correctement (en arabe) sous Windows 7
    3. Composant Db Zeos7.1.2
    4. Le ShowMessage est correct
    5. Le transfert se fait via le composant TExcelApplication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        with IExcel do begin
           Visible[0] := True;
           WorkBooks.Add(NULL, 0);
           IRange := ActiveCell;
           i := 2;
           IRange := Range['A' + IntToStr(i), 'A' + IntToStr(i)];
           IRange.Value := qEmp.FieldByName('NOM_AR').AsString
        end;

  6. #6
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    @ShaiLeTroll : Delphi 7 ça remonte !

    Je dispose bien de Delphi 2010 mais la version 5.04.1 de QuickReport installée est boggé ! Je ne peux pas imprimer mes docs au format Paysage ! Voilà !
    C'est le dilemme ! D'un un pépin de caractères et de l'autre le format paysage !

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je pense qu'il faut ajouter une indication quelconque à la cellule, une propriété qui indique qu'il s'agit d'une fonte ? Ou d'un encodage différent (maintenant pour l'encodage est-ce à la création de la feuille) ?
    N'ayant pas Excel sous la main (difficile de tester TExcelApplication), donc impossible d'en dire plus, mais s'il s'agissait d'OpenOffice c'est cette piste que je suivrai

    @ShaiLeTroll : Delphi 7 ça remonte !
    que dire alors de D3 que je continu à utiliser pour de la maintenance !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    S'il y a une alternative à TExcelApllication, je suis preneur ! L'essentiel est d'avoir un fichier MS-Excel avec des caractères lisibles !

  9. #9
    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
    Citation Envoyé par akli_agha Voir le message
    2. Composants visuels, des TEdit simples qui s'affichent correctement (en arabe) sous Windows 7
    4. Le ShowMessage est correct
    Correct, cela affiche de l'arabe ?
    Donc c'est que ton application ANSI fonctionne sous le CharSet Arabe et non en Windows-1252

    si la valeur qEmp.FieldByName('NOM_AR').AsString est correcte pourquoi es-tu parti sur UTF8Encode ?

    Essaye FormulaLocal à la place de Value
    ou alors utilise plutôt MultiByteToWideChar en lui spécifiant le code page actif de l'application,
    Utilise plutôt CP_THREAD_ACP qui je pense, utilise le paramètrage des applications ANSI
    C'est pour cela que l'arabe s'affiche dans tes applications

    Nom : Ansi.Arabe.jpg
Affichages : 474
Taille : 168,5 Ko
    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 actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    FormulaLocal donne : ãáíß

    UTF-8, c'est pour, justement, ne pas tomber dans ce pétrin de l'unicode.

    Je n'ai pas de souci dans l'interface ni dans les rapports de mon appli. L'utilisateur a besoin (je ne sais pas pourquoi !) d'avoir le listing sur MS-Excel. Tout baigne hormis ces sacro-saints caractères arabes ! Là, j'ai 2 semaines de retard ! Warf !

  11. #11
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Bonjour à tous,

    Je crois avoir mis fin à mon calvaire !
    Voici l'issue :

    Parti de l'idée de l'infatigable ShaiLeTroll, qui a toute ma gratitude, j'ai trouvé cette fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          Function StringToWideStringEx(const S: String; CodePage: Word): WideString;
          var
             L : Integer;
          begin
             L := MultiByteToWideChar(CodePage, 0, PChar(S), -1, nil, 0);
             SetLength(Result, L-1);
             MultiByteToWideChar(CodePage, 0, PChar(S), -1, PWideChar(Result), L - 1);
          end;
    Aprés avoir essayé pas mal d'argument pour le CodePage, miracle le 1256 a donné ses fruits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       StringToWideStringEx(qEmp.FieldByName('NOM_AR').AsString, 1256);
    L'arabe me fait voir des vertes et des pas mûres ! Warf.

  12. #12
    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
    Windows-1256 c'est le charset de l'arabe, je ne me souvenais pas du numéro, tu l'as trouvé tant mieux !
    Windows-1252 c'est le charset Latin
    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

  13. #13
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Ah si je savais vous saviez ! Merci à tous !

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

Discussions similaires

  1. Transfert vers excel, problème format DATE
    Par Plumette_ dans le forum AS/400
    Réponses: 2
    Dernier message: 23/10/2008, 19h51
  2. Transfert depuis USERFORM vers fichier EXCEL
    Par janobrasil dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2008, 13h15
  3. Transfert de données Excel vers une base de données Access
    Par amirking dans le forum Bases de données
    Réponses: 5
    Dernier message: 19/09/2008, 12h08
  4. Transfert de données excel vers access
    Par Isabelle27 dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2007, 07h11
  5. Transfert de projet Excel/VB vers Projet VB6
    Par blueloyl dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/10/2006, 16h01

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