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 :

Ajout de champ dans ClientDataSet


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Ajout de champ dans ClientDataSet
    Bonjour,
    J'utilise Delphi 2005, et une base de données Paradox.
    J'ai un clientDataSet (ici resRequete) dans lequel je stocke le resultat d'une requête SQL via un DataSetProvider. Jusqu'ici, tout va bien, je peux voir mes données dans le DBGrid associé.
    Le problème est que je veux ajouter un champ 'num_agreg' dans ce ClientDataSet, et que quand je le fais, seul ce champ apparait dans le DBGrid. Pourtant, les autres champs existent toujours (je peux afficher leur nom).
    Qu'est ce qui cloche ? Existe-t-il des filtres d'affichage qui se seraient activés à l'insu de mon plein gré ? (me recherches là dessus n'ont rien donné)

    Voici mon code :
    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
    16
    17
    18
    19
    20
    21
    Query1.SQL.Clear;
    Query1.SQL.Add(reqtemp);
    Query1.ExecSQL;
    resRequete.Open;
    resRequete.Active:=false;
     
     
    Field1:=TIntegerField.Create(resRequete);
    with field1 do
    begin
        fieldName:='num_agreg';
        fieldKind:=fkcalculated;
        DataSet:=resRequete;
        Name:=resRequete.Name+FieldName;
        resrequete.fieldDefs.Add(Name,ftinteger);
    end;
     
    resRequete.Active:=true;
    resRequete.open;
    DbGridResult.DataSource:=DataSource4;
    DBGridResult.Visible:=True;
    Par avance, merci pour vos réponses.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Si le focntionnement est le même que pour le dbgrid lors d'un ajout de champs, tu es obligé d'ajouter tous les champs, sinon seul le champ, que tu ajoutes, est affiché. (s'il n'y a pas eu de création de champs dans la zone ajout/suppression de champ qui va bien du dbgrid)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Ok, merci.
    C'est quand même plutôt ennuyeux...

    Si j'ai bien compris, je suis obligé de faire une boucle pour recréer tous les anciens champs, puis ajouter les miens à la suite, puis inserer les données...

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Oui, mais si ta requete ne bouge pas, tu n'as qu'a les créer une fois pour toutes dans le ClientDataset

    Mais bon ajouter dynamiquement les champs c'est pas très long à faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    En effet, ma requête n'est pas fixe et je ne connais pas à l'avance les champs qu'elle retourne.
    Pour ce qui est d'ajouter les champs dynamiquement, j'ai un peu cherché, et j'ai commencé une boucle qui récupère les noms des champs. Par contre, je ne vois pas comment créer les champs en fonction de ce qu'ils vont contenir (est ce que ça sera un TStringField, un TIntegerField), j'imagine qu'il faut que j'utilise la propriété " resRequete.FieldsDef[i].fieldClass ", mais je ne vois pas comment...

    Merci pour ta patience...

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par fredraoul
    En effet, ma requête n'est pas fixe et je ne connais pas à l'avance les champs qu'elle retourne.
    Pour ce qui est d'ajouter les champs dynamiquement, j'ai un peu cherché, et j'ai commencé une boucle qui récupère les noms des champs. Par contre, je ne vois pas comment créer les champs en fonction de ce qu'ils vont contenir (est ce que ça sera un TStringField, un TIntegerField), j'imagine qu'il faut que j'utilise la propriété " resRequete.FieldsDef[i].fieldClass ", mais je ne vois pas comment...

    Merci pour ta patience...
    Avec Fields.Fields[i] tu as tout ce qu'il te faut pour générer tes champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i := 0 to MaQuery.fieldcount -1 do
    resrequete.fieldDefs.Add(MaQuery.Fields.Fields[i].FieldName,MaQuery.Fields.Fields[i].DataType );
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    C'est noté, et ça marche.
    Merci beaucoup

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

Discussions similaires

  1. ajouter un champ dans une table existant
    Par zidenne dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/10/2005, 21h27
  2. Ajouter un champ dans une autre base Access
    Par scaalp dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 15h34
  3. Ajouter des CHAMPS dans une table via ASP
    Par hysteresis dans le forum Access
    Réponses: 1
    Dernier message: 27/09/2005, 15h39
  4. Ajouter un champs dans un Report
    Par nora_ora dans le forum Reports
    Réponses: 7
    Dernier message: 09/12/2004, 17h24
  5. Ajouter un champs dans une table (Access 2000)
    Par Didier100 dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/10/2004, 13h02

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