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

SQL Firebird Discussion :

Problème d'accent dans vue SQL


Sujet :

SQL Firebird

  1. #1
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut Problème d'accent dans vue SQL
    Bonjour,
    J'ai créé une vue qui selectionne des données et calcul un statut en fonction de certaines date.
    Dans mes statuts j'ai : "Receptionné", "expédié"...
    J'ai saisi mes statuts sous cette forme là, et ils ressortent avec un point d'interrogation à la place des accents.

    Je ne comprends pas trop car lorsque depuis mon formulaire utilisateur j'insert des données avec accents, il ressortent bien par la suite...
    Savez-vous d'ou vient le problème ?
    Il doit falloir determiner le CharSet mais je ne sais pas ou ni comment ?
    Merci de votre aide,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Cast(iif(("TSTT"."RETOUR_PREV" Is Not Null) AND ("TSTT"."RETOUR_PREV"> CURRENT_DATE), 'En retard',
        iif("TSTT"."Depart_SAE" Is Null, 'A expédier',
            iif(("TSTT"."Depart_SAE" is Not Null) AND ("TSTT"."RETOUR_PREV" Is Not Null) AND ("TSTT"."Arrivee_SHE" Is Null), 'Expedié',
                iif(("TSTT"."Depart_SAE" Is Not Null) And ("TSTT"."Arrivee_SHE" Is Not Null) And ("TSTT"."Depart_SHE" is null), 'Chez le STT',
                    iif(("TSTT"."Depart_SHE" Is Not Null) And ("TSTT"."Arrivee_SAE" Is Null), 'Au depart STT',
                        iif("TSTT"."Arrivee_SAE" Is Not Null, 'Receptionné', ''
                        )
                    )
                )
            )
        )
    ) as Varchar(20))as "Statut",

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 261
    Par défaut
    Bonjour,

    La mauvaise présentation des caractères accentués est typique d'un mauvais choix de CharSet dans les paramètres de la connexion.
    Je vous conseillerai de suivre ce que j'ai écrit https://www.developpez.net/forums/d1.../#post10846779 si vous voulez éviter les problèmes, mais vous ne dites pas comment est généré votre formulaire utilisateur.
    Autre remarque, pourquoi mettez-vous systématiquement tous les noms de tables et de champs entre guillemets? Ils ne font qu'imposer l'identité complète de ces noms, casse comprise. Quel est l'intérêt d'imposer cette contrainte? Le seul cas où je l'utilise, c'est pour le noms de paramètres d'entrée dans des requêtes à exécuter dans des outils comme IBExpert; ça permet de présenter un nom "en bon français" avec espaces et accents dans le tableau des valeurs à saisir.

    André

  3. #3
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Bonjour,
    Merci de votre réponse, je suis sous Lazarus, du coup, vous dites dans votre message sur le lien :
    Sous D7 j'utilise WIN1252, sous Lazarus UTF8

    Alors comment definir UTF8 sous lazarus ?
    Je me connecte avec IBX for Lazarus

    Je viens de me rendre compte que ma base n'a pas de charset de défini...

    Merci de ton aide,

  4. #4
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    J'ai corrigé mon problème en ajoutant "CHARACTER SET UTF8" sur mon champ calculé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Cast(iif((TSTT.RETOUR_PREV Is Not Null) AND (TSTT.RETOUR_PREV> CURRENT_DATE), 'En retard',
        iif(TSTT."Depart_SAE" Is Null, 'A expédier',
            iif((TSTT."Depart_SAE" is Not Null) AND (TSTT.RETOUR_PREV Is Not Null) AND (TSTT."Arrivee_SHE" Is Null), 'Expedié',
                iif((TSTT."Depart_SAE" Is Not Null) And (TSTT."Arrivee_SHE" Is Not Null) And (TSTT."Depart_SHE" is null), 'Chez le STT',
                    iif((TSTT."Depart_SHE" Is Not Null) And (TSTT."Arrivee_SAE" Is Null), 'Au depart STT',
                        iif(TSTT."Arrivee_SAE" Is Not Null, 'Receptionné', ''
                        )
                    )
                )
            )
        )
    ) as Varchar(20) CHARACTER SET UTF8)as "Statut",

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 576
    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 576
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    la base serait donc en Charset NONE ? Au fait, il s'agit de quelle version de Firebird ?

    il y a peut être cette solution
    If TYPE OF is used with a (VAR)CHAR type, its character set and collation are retained:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        create domain iso20 varchar(20) character set iso8859_1;
        create domain dunl20 varchar(20) character set iso8859_1 collate du_nl;
        create table zinnen (zin varchar(20));
        commit;
        insert into zinnen values ('Deze');
        insert into zinnen values ('Die');
        insert into zinnen values ('die');
        insert into zinnen values ('deze');
     
        select cast(zin as type of iso20) from zinnen order by 1;
          -- returns Deze -> Die -> deze -> die
     
        select cast(zin as type of dunl20) from zinnen order by 1;
          -- returns deze -> Deze -> die -> Die

    Casting to a column's type: In Firebird 2.5 and above, it is possible to cast expressions to the type of an existing table or view column. Only the type itself is used; in the case of string types, this includes the character set but not the collation. Constraints and default values of the source column are not applied.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        create table ttt (
          s varchar(40) character set utf8 collate unicode_ci_ai
        );
        commit;
     
        select cast ('Jag har många vänner' as type of column ttt.s) from rdb$database;
    Ou créer un domaine ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    la base serait donc en Charset NONE ? Au fait, il s'agit de quelle version de Firebird ?
    Salut Sergio,
    Oui Charset NONE sur la base... Quelle est la conséquence ?
    Firebird 3

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 576
    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 576
    Billets dans le blog
    65
    Par défaut
    D'un autre côté les tests que j'ai pu faire dans jeux d'essai ne me posent aucun souci avec FB3 donc un script avec description de table et quelques INSERTs serait apprécié pour tests plus poussés

  8. #8
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Je pense que ça ne sera pas la peine, j'ai résolu mon problème regade mon post précédent ici : https://www.developpez.net/forums/d1.../#post10855144

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 576
    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 576
    Billets dans le blog
    65
    Par défaut
    AH, nos réponses se sont croisées ... et je n'avais pas rafraichi mon écran
    Un petit résolu alors

    PS. comme Alanglet ces " " pour les noms de champs c'est trop

  10. #10
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    PS. comme Alanglet ces " " pour les noms de champs c'est trop
    Oui, j'ai supprimés les " ", mais sur les champs dont le nom est en partie en minuscule, je dois les laisser sinon ça bug.
    Car dans ma table, j'ai des champs 100% en majuscule, et d'autres en minuscule. Les champs en majuscule sont des champs invisible pour l'utilisateur dans l'application. Les champs en minuscule sont des champs qui servent d'en-tête de tableau dans les formulaires utilisateurs (field.name).

    Là encore peut être que j'ai une mauvaise pratique ?
    Que serait-il mieux de faire ? Mettre 100% des champs en majuscule et renommer les champs ensuite en minuscule lors du select ?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 261
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Alors comment definir UTF8 sous lazarus ?
    Je me connecte avec IBX for Lazarus
    Dans la propriété Params (TStrings) du TIBDatabase vous mettez:
    lc_ctype=UTF8
    C'est aussi là que vous pouvez ajouter les identifiants de connexion:
    user_name=SYSDBA
    password=masterkey

    Il s'agit là du CharSet de la connexion qui permet la conversion des chaînes de la base en chaînes compréhensibles par Lazarus pour être affichées directement
    Le CharSet par défaut de la base c'est celui dans lequel seront écrites les chaînes dans les champs s'il n'est pas spécifié autrement pour ces champs.
    Si ce dernier CharSet est None il n'y a eu aucune conversion lors de l'écriture. Donc si vous avez utilisé votre base par exemple avec D7 (en WIN1252), les caractères >127 sur un seul octet (nos caractères accentués) seront illisibles en UTF8 par Lazarus.

    André

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 261
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Là encore peut être que j'ai une mauvaise pratique ?
    Que serait-il mieux de faire ? Mettre 100% des champs en majuscule et renommer les champs ensuite en minuscule lors du select ?
    Si lors de la création de la table les noms de champs ne sont pas mis entre guillemets, ils sont écrits en majuscules dans les tables système (tables de définitions de la base). Dans le texte des requêtes, procédures stockées, la casse des noms est alors indifférente, mais dans les résultats les noms de champs sont affichés en majuscules par défaut, ou un nom attribué par FB si le champ est calculé. Vous pouvez renommer chaque champ résultat en ajoutant à la fin de sa définition as Mon_Nom (qui s'écrira en majuscules MON_NOM) ou as "Mon Nom" (qui s'écrira tel que Mon Nom).

    André

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/06/2009, 11h58
  2. [MySQL] Problème d'apostrophes dans insertion sql
    Par 12_darte_12 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 30/05/2006, 16h20
  3. problème d'accents dans le formulaire de contact
    Par Rocket666 dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 14h38
  4. problème d'accents dans le formulaire de contact
    Par Rocket666 dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2006, 14h48
  5. Réponses: 8
    Dernier message: 15/11/2005, 18h06

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