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 :

UTF8-Encode ne marche pas avec la fonction "Filter"


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 UTF8-Encode ne marche pas avec la fonction "Filter"
    bonjours a tous;
    UTF8ENCODE marche tres bien avec la fonction Locate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.Locate('champ1',utf8encode(edit1.Text),[locaseinsensitive]);
    mais elle ne marche pas dans la fonction Filter avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.Filter:='[champ1]='+quotedstr(utf8encode(edit1.text));
    apres l'execution, table1.Filter='champ1=edit1.text'
    est ce qu'il y a un truc que je dois l'ajouter a l'instruction ?
    Merci pour vos aides.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Pourquoi des crochets autour de champ1 ?
    Filtered à true ?
    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
    - meme sans crochets marche aussi... je l'ai appris comme ca depuis longtemp et ca marche
    - oui ... Filtered=true

    - ce code marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    table1.Filtered:=false;
    table2.Locate('champ1',utf8encode(edit1.Text),[locaseinsensitive]);
    table1.Filter:='champ1='+quotedstr(table2.FieldByName('champ1').AsAnsiString);
    table1.Filtered:=true;
    Rq:la table2 contient aussi "champ1" avec les memes enregistrements

  4. #4
    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
    resalut;
    est ce que vous pouvez m'expliquer ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine:=utf8encode(edit1.text);
    resultat: chaine=edit1.text

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    La variable chaine contient 'edit1.text' comme valeur ou alors UTF8Encode n'a eu aucun effet (le é ne sont pas traduit dans un truc genre é )
    Je ne comprends pas bien ton histoire de résultat !
    Edit1 est correctement instancié ?

    Est-ce que le BDE supporte l'UTF8 dans un Filter ?
    As-tu essayé un SQL et un TQuery ?
    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

  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
    bjr ShaiLeTroll;
    je veux dire par resultat le contenu de la variable chaine apres l'execution de l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine:=utf8encode(edit1.text);
    normalement chaine doit contenir une chaine de caracteres codés et pas la meme valeur de edit1.
    mes tables sont en Paradox

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    tu stockes de l'UTF8 dans Paradox, ça c'est l'une des bidouilles que je t'avais proposé dans un autre sujet !
    C'est courageux (voire téméraire) d'utiliser Paradox+Arabe+Français, une migration vers FireBird t'aurait évité ce genre d'ennui !

    Ton contient edit1.text une chaine UnicodeString
    En Delphi2009, UTF8Encode\UTF8Decode n'était pas marqué "deprecated" ?
    Bon semble qu'il n'y ait plus remarque à ce sujet en XE2 ...

    Pour l'encodage de edit1.text, cela dépend du contenu, si Français, seul les accents seront encodés sur deux caractères
    Si arabe, tout sera encodé

    Essaye de voir les différences selon si chaine est un String (UnicodeString), AnsiString ou UTF8String et même RawByteString

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      chaine: RawByteString;
    ...
    begin
    ...
      chaine := UTF8Encode(Edit1.Text);
      table1.Filter := 'champ1=' + QuotedStr(chaine); 
      table1.Filtered := true;
     
    ou
     
      chaine := '''' + UTF8Encode(Edit1.Text) + '''';
      table1.Filter := 'champ1=' + chaine; 
      table1.Filtered := true;
    QuotedStr prend la RawByteString fourni par UTF8Encode, comment la traite-il vu qu'il utilise une UnicodeString en paramètre et UnicodeString en valeur de retour !
    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
    bsr ShaiLeTroll;
    j'ai reussi avec le 2eme code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine := '''' + UTF8Encode(Edit1.Text) + '''';
      table1.Filter := 'champ1=' + chaine; 
      table1.Filtered := true;
    mais j'aimerai bien savoir comment ca se passe ?
    pourquoi utf8encode (toute seule) n'encode pas une chaine de caracteres et apres avoir ajouter les guillemets on obtient une chaine encodé
    en plus, si edit1.text='chaine_de_caracteres'
    alors: chaine=''chaine_encodé''
    et en suite pour faire un traitement (de comparaison par exemple dans les tables) on doit enlever un guillemet de l'avant et un de la fin pour avoir des resultats correctes

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Je dirais plutôt que UTF8Encode encode en UTF8String mais comme tu affecte une UTF8String lors du passage de paramètre à QuotedStr donc à une UnicodeString, il y a une conversion implicite, qui annule la conversion en UTF8

    l'Ajout des guillemets c'est uniquement pour Filter pour lui délimiter la chaine !
    Même principe dans un SQL

    En utilisant des requêtes paramètrées, cela pourrait être moins pénible (en veillant à utiliser AsAnsiString et des RawByteString pour empecher les conversions implicites !)

    Encore une fois UTF8+Paradox dans un Delphi Unicode c'est un très mauvais choix technique !
    C'est intéressant par curiosité mais très difficile à gérer !
    Déjà le déploiement du BDE sous un OS comme WinSeven ou 64Bits, sera pénible, as-tu pensé à cela avant de lancer dans un développement aussi complexe !
    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

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

Discussions similaires

  1. [PHP 5.3] Fonction str_replace qui ne marche pas avec '<br/>' ?
    Par [ZiP] dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2010, 18h27
  2. [VB6] TypeOf ne marche pas avec les Label ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 21/04/2006, 13h36
  3. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11
  4. [xhtml][css] bouton du form ne marche pas avec IE6
    Par chinouk dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 14/06/2005, 14h00
  5. Rollback ne marche pas avec interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/03/2004, 08h39

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