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

Delphi Discussion :

ajouter dynamiquement tous les champs de TFDQuery sans lire ses données


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Points : 84
    Points
    84
    Par défaut ajouter dynamiquement tous les champs de TFDQuery sans lire ses données
    salut


    Lorsque les données sont disponibles(FDQuery1.open en conception), nous pouvons en ajoutant comme suite:
    Nom : Sans titre.png
Affichages : 358
Taille : 9,5 Ko


    mais comment ajouter tous les champs sans lire ses données (FDQuery1.open=false en conception) (les données non disponibles en conception mais Les données apparaissent lors de l'exécution)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with FDQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select * from  etudiants');
      Open;
    end;

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 507
    Points : 2 779
    Points
    2 779
    Billets dans le blog
    10
    Par défaut
    Bonjour, tu ne peux pas connaître la structure de la ou des tables sous-jacentes si tu n'ouvres pas ta requête pour précharger le DataSet associé au fdQuery. Mais une fois le DataSet pré-renseigné tu peux refermer le FdQuery en phase de conception. Sur MS-SQL tu peux par exemple faire un select top 1 * .... pour précharger le Dataset et ensuite repasser en Select * ...

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Points : 84
    Points
    84
    Par défaut
    salut ALWEBER

    Je pense que tu n'as pas compris ce que je veux dire
    Qu'y a-t-il dans l'image comment puis-je faire Dynamiquement ??

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Une fois ouvert tous les champs de la table seront accessibles via FieldByName après le Open voir Fields et FieldDefs
    C'est qu'il faut utiliser à la place des champs persistants (le mode conception) si l'on a bcp de requêtes et que faire un TFDQuery pour chaque SQL avec tous les champs persistants fini par faire un DataModule lourdissime

    Pour Select * from etudiants, il est préférable de faire Select ID_etudiants, Champ1, Champ2 ... from etudiants pour ne lire QUE ce qui est utile et cela permet une maintenance plus facile, il suffit de lire le SQL pour connaître les données disponibles, pas besoin d'aller vers un Studio DB annexe

    Pour afficher la liste des champs sans ouvrir le DataSet, il faut passer par les méta-data spécifique de la base de données ou au pire faire Select * from etudiants WHERE 1 = 0 pour récupérer les FieldDefs/Fields.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Points : 84
    Points
    84
    Par défaut
    Je pense que je n'ai pas bien expliqué mon problème

    Pour vous rapprocher de l'idée ... c'est ce que je veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DataSet.FieldDefs.Update;
    for I := 0 to DataSet.FieldDefs.Count - 1 do
        DataSet.FieldDefs[I].CreateField(DataSet);

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Mais pourquoi faire ?
    C'est intéressant si c'est un DataSet mémoire sans DB derrière, comme le TClientDataSet et sa méthode CreateDataSet

    Si vous n'utilisez pas de champs persistants qui permettent un accès rapide au champs via la reflexion RTTI (published) qui permet dès l'ouverture le mappage de tous les TFields ce qui fait gagner quelques µs à l'éxécution par rapport à un FieldByName, votre demande n'a pas de sens.

    Sauf si vous avez un SQL dynamique et que vous souhaitiez en plus avoir un TField en fkCalculated ou fkLookup
    Voir Changer contenu DBGrid par programmation

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Points : 84
    Points
    84
    Par défaut
    Oui, vous avez raison. Je souhaite modifier le contenu de dbgrid (j'ai un champ de type integer contient des valeur 0 ou 1 ) Au lieu de zéro, je veux afficher le mot (non) Et à la place d'un, je veux afficher le mot (oui)

    C'est pourquoi j'ai mis ce code enlèvement (OnGetText ) et il n'a pas fonctionné avec moi .. Rien ne m'arrive dans dbgrid si FDQuery1 est fermer dans le mode conception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Tform1ACTIVERGetText(Sender: TField; var Text: string;
      DisplayText: Boolean);
    begin
    if DisplayText and Assigned(Sender) and not Sender.IsNull then
     case Sender.AsInteger of
      0 : Text := 'non';
      1 : Text := 'oui';
     end;
    end;

    Mais quand je m'ouvre FDQuery1 en conception Le problème a été résolu lorsque j'ai fait l'option(ajouter tous les champs) qui se trouve dans l'image que j'ai placée dans le sujet

    C'est pourquoi j'ai posé ma question

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Vous devez définir aussi par code comme dans ce sujet Combobox Oui/Non et champ O/N

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with FDQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select * from  etudiants');
      Open;
      FieldByName('ACTIVER').OnGetText := Tform1ACTIVERGetText;
    end;

    Sinon voir pour un CAST en SQL pour que le driver transforme votre entier automatiquement en boolean, pour avoir TBooleanField
    Par exemple, un MySQL 4 MyISAM, le type TinyInt(1) était mappé en Boolean

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Points : 84
    Points
    84
    Par défaut
    merci c'est résolu avec une MODIFICATION suivante : ( tform1ACTIVERGetText)---> devient( form1ACTIVERGetText)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with FDQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select * from  etudiants');
      Open;
      FieldByName('ACTIVER').OnGetText := form1ACTIVERGetText;
    end;

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/12/2015, 13h01
  2. La saisie de tous les champs active le btn Ajouter
    Par ahbari dans le forum VB.NET
    Réponses: 18
    Dernier message: 15/04/2015, 19h22
  3. Réponses: 5
    Dernier message: 24/03/2009, 16h52
  4. Réponses: 16
    Dernier message: 12/07/2007, 17h35
  5. requete ajout caractere sur tous les champs d'une table
    Par lorenzo74 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/06/2006, 14h34

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