Afficher un message
Vieux 11/01/2008, 22h16   #3
sheep
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Changer dynamiquement les champs d'un TDataSet

Bonjour,
J'ai un vague souvenir d'un (gros) livre de John Colibri
Delphi <-> DBase qui donnait des indications à ce sujet.
Sans avoir de réponse formelle à ce sujet, c'est peut être
le bout d'un fil qu'il suffirait de tirer ...

--
Phil


"RESO / Claude GUTH" <cl.guth@free.fr> a écrit dans le message de news:
fm7t8q$499$1@sd-6498.dedibox.fr...
> Plusieures solutions :
>
> intégrer le champ dans la requête SQL :
>
> Select *, cast(null as MonType) as MonChampEn Plus from MaTable...
>
> ou l'ajouter à la liste des champs (voir note ci-dessous) :
>
> procedure AddField(UnDataSet : TDataset; UnNomChamp : string;
> UnTypeChamp : TFieldType; UneTaille : Integer;
> UnFormat : string);
> {ajout d'un champ à une table }
> var UnChamp : TField;
> begin
> with UnDataSet, FieldDefs.AddFieldDef do
> begin
> Name := UnNomChamp;
> DataType := UnTypeChamp;
> if UnTypeChamp = ftString then Size := UneTaille;
> UnChamp := CreateField(UnDataSet);
> if UnFormat <> '' then case UnTypeChamp of
> ftInteger, ftFloat : TNumericField(UnChamp).DisplayFormat :=
> UnFormat;
> ftDateTime, ftDate, ftTime : TDateTimeField(UnChamp).DisplayFormat
> := UnFormat;
> end;
> end;
> end;
>
>
>
> Puis sur le OnBeforeOpen :
>
> 1> appel à SetFieldDefs pour récupérer la liste des champs
> 2>si ajout dynamique appel à AddField
> 3>modif des propriétés du champ :
>
> MonChamp.Calculated := True;
> MonDataset.OnCalcFields := MonDatasetCalcFields; // ou c'est qu'il y a
> mon code
>
> Je fais ça avec des IBQuery, tables mémoire, etc.. Ca devrait marcher avec
> tout descendant de Dataset.
>
> Pour les grilles je prends dxDBGrid, bref je ne sais pas répondre à la
> deuxième partie de ta question.
>
> Bonne route et bonne année à tous ceux qui lisent ce post.
>
>
>
>
>
>
> "Francois Piette" <francois.piette@overbyte.be> a écrit dans le message de
> news: fm7mnp$if$1@sd-6498.dedibox.fr...
>> Ayant un dérivé quelconque deTDataSet (par exemple un TAdoQuery), je
>> voudrais à l'exécution ajouter des champs calculés en fonction du
>> contexte.
>> Comment faire cela ?
>>
>> Dans le même ordre d'idée, je voudrais tout aussi dynamiquement, rendre
>> visibles ou invisibles des champs d'un TDataSet affichées dans une
>> TDBGrid.
>> Comment faire cela ?
>>
>> Dans un cas comme dans l'autre, j'ai une TDBGrid liée à une TDataSource
>> liée
>> au TDataSet. Je n'ai pas de contrôle sur les requêtes ni les result-set
>> du
>> TDataSet. Il n'y a aucun champ défini au design time. Les champs sont
>> tous
>> déterminés par ce que retourne le serveur qui exécute la requête du
>> TDataSet.
>>
>> Merci d'avance.
>> --
>> francois.piette@overbyte.be
>> Auteur du freeware ICS - Internet Component Suite
>> Auteur du freeware MidWare - Multi-tiers framework
>> http://www.overbyte.be
>>
>>

>
>



  Réponse avec citation
 
Page generated in 0,05948 seconds with 9 queries