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 :

Firedac et nom de champs réservés


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut Firedac et nom de champs réservés
    Bonjour

    Toujours dans la migration d'un vieux soft Delphi 5 + Dbase, j'ai un problème que j'aimerais résoudre facilement si possible.

    Tout d'abord, il faut savoir que les tables étaient gérées comme de vulgaires fichiers sans lien quelconque entre les uns et les autres (oublions les PK et les FK).
    Plusieurs tables ont un champ nommé OF. Eh oui, dans Dbase ça ne pose aucun problème et avec le BDE non plus.
    Mes tables passées en MySQL, le requêtes que je fais passent problème en visualisation avec Firedac.
    Mais, si je modifie une ligne, Firedac tente de mettre à jour les données avec un update des valeurs.
    Tout irait bien si Firedac construisait sa requête interne avec des ` autour des noms de champs comme je le fais moi-même quand j'écris une requête.
    Lui, fait par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update latable set OF = 34 where .....
    Évidemment, gros crash à ce moment là.

    La solution pénible, longue et risquée consiste à renommer les champs de ce genre dans les tables concernées ainsi que dans les centaines de composants TField dans le projet.

    La solution qui existe peut-être mais que je n'ai pas trouvée est celle qui forcerait Firedac à mettre chaque nom de champ entre ` quand il construit une requête de travail.
    Peut-être un paramètre quelque part dans un fichier ini ou une propriété cachée d'un composant Firedac. Ce qi donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update `latable` set `OF` = 34 where .....
    Et là ça me ferait gagner un max de temps :-)

    Alors, à votre avis ? Solution risquée ou ce paramétrage existe dans Firedac ?

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Juste pour vérification (sachant que j'ignore si c'est possible de le forcer dans FireDAC), une requête préfixant les champs par le nom de la table passe-t-elle ?

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Une requête simple passe bien oui

    select affectations.of from affectations

    renvoie la colonne of en résultat

    Est-ce que tu penses qu'il est possible de forcer firedac à qualifier en interne chaque nom de champ par le nom de table ??

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Tu as essayé en mettant un alias ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.of from affectations a
    Oh, bien sûr il y a la solution " "
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select "of" from affectations
    mais attention elle est case sensitive

    pour le reste, même en épluchant la bible de Cary Jensen, les diverses options n'en parlent pas. Dmitry Arefiev serait certainement l'interlocuteur le plus à même de le dire (il répond quelques fois sur les forums de Delphi Praxis).
    Toutefois peut-être que http://docwiki.embarcadero.com/Libra...oteIdentifiers est la piste

    à essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm22.FormCreate(Sender: TObject);
    begin
    FDConnection1.FormatOptions.QuoteIdentifiers:=true;
    end;
    [Edit] ou, bien sûr vu après coup (parce que je connais mal mon alphabet ), tout simplement en cochant la case de la connexion ou de la table FormatOptions.QuotedIdentifiers
    Nom : Capture.PNG
Affichages : 128
Taille : 15,7 Ko
    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 émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    T'es trop fort

    Je ne l'avais pas vu celui-là parce que je cherchais du côté de TFDPhysMySQLDriverLink qui me semblait plus approprié pour définir le caractère à utiliser.
    Mais effectivement, Firedac semble se débrouiller tout seul pour trouver le ` quand on est sur MySQL.

    Un grand merci une fois de plus.

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Avant que tu retournes au soleil, la plus grande référence Firedac que tu connaisses se situe où ?
    Tu parlais récemment de la bible Cayy Jensen. Tu aurais une URL pur moi stp ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Je l'ai mise dans les Livres Delphi en anglais https://delphi.developpez.com/livres...res-en-anglais
    Delphi in Depth : FireDAC de Cary Jensen

    Citation Envoyé par SergioMaster
    pour le reste, même en épluchant la bible de Cary Jensen, les diverses options n'en parlent pas.
    en fait, si, j'avais raté la page 64
    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 émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Merki

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

Discussions similaires

  1. [MySQL] mot réservé dans un nom de champ
    Par dreamwanderer dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/12/2005, 21h54
  2. nom des champs d'une table
    Par K-ZimiR dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2004, 15h21
  3. comment recuperer le nom des champs ?????
    Par e11137 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2004, 11h00
  4. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 19h30
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 11h00

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