Hi Brad,

Maybe I spoke too soon.  Are you trying to create a new field before or
after your dataset is opened?  If you are asking how to do it after you have
the dataset open and your are viewing your data, then I spoke to soon.  If
you are wanting to add the field just before you open it then you should be
fine.  Place the code I gave you in the OnBeforeOpen of the ClientDataset.

Mike

----- Original Message ----- 
From: "Gies,Brad" <[EMAIL PROTECTED]>
To: "Delphi-Talk Discussion List" <[email protected]>
Sent: Tuesday, October 11, 2005 7:06 AM
Subject: RE: Adding a field to a ClientDataSet at runtime


> No, there are no queries involved. I'm trying your procedures right now.
> Will let you know if they work for me.
>
>
>
> Sincerely,
>
> Brad Gies
> -------------------------------------
> NLM Software
> Southfield, MI, USA
> ------------------------------------- 
>
>
>
>
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:delphi-talk-
> > [EMAIL PROTECTED] On Behalf Of M Tuttle (KS)
> > Sent: Tuesday, October 11, 2005 12:15 AM
> > To: Delphi-Talk Discussion List
> > Subject: Re: Adding a field to a ClientDataSet at runtime
> >
> > Hi Brad,
> >
> > I asked "Do you also need to add these fields to a query?"
> >
> > If the ClientDataset is tied to a Query and not used as an in-memory
> > dataset
> > then you must first add it to the query before adding it to the
> > ClientDataset.
> >
> > I know this works because we build our queries and clientdatasets on
> the
> > fly
> > as needed in out program.
> >
> > Here is three actual procedures that we use to create 3 different
> query
> > fields (Integer, Date and String):
> >
> >
> {-----------------------------------------------------------------------
> --
> > --
> > --
> >   Procedure: AddQueryStringField
> >   Author:    Michael Tuttle
> >   Date:      2001
> >   Purpose:
> >
> ------------------------------------------------------------------------
> --
> > --
> > -}
> > procedure TdtmAccountRem.AddQueryStringField(Query: TIBQuery; FldName:
> > String;
> >   FldKind: TFieldKind; FieldSize: Integer);
> > var
> >   fldString: TStringField;
> > begin
> >   fldString := TStringField.Create(Query);
> >
> >   with fldString do
> >     begin
> >       FieldName := FldName;
> >       FieldKind := FldKind;
> >       DisplayLabel := FieldName;
> >       Size := FieldSize;
> >       DataSet := Query;
> >       Name := Query.Name + FieldName;
> >       ProviderFlags := [];
> >     end;
> >
> >   with Query.FieldDefs do
> >     begin
> >       Add(fldString.Name, ftString, FieldSize, False);
> >       Update;
> >     end;
> > end;
> >
> >
> {-----------------------------------------------------------------------
> --
> > --
> > --
> >   Procedure: AddQueryDateField
> >   Author:    Michael Tuttle
> >   Date:      2001
> >   Purpose:
> >
> ------------------------------------------------------------------------
> --
> > --
> > -}
> > procedure TdtmAccountRem.AddQueryDateField(Query: TIBQuery; FldName:
> > String;
> >   FldKind: TFieldKind);
> > var
> >   fldDate: TDateField;
> > begin
> >   fldDate := TDateField.Create(Query);
> >
> >   with fldDate do
> >     begin
> >       FieldName := FldName;
> >       FieldKind := FldKind;
> >       DisplayLabel := FieldName;
> >       DataSet := Query;
> >       Name := Query.Name + FieldName;
> >       ProviderFlags := [];
> >     end;
> >
> >   with Query.FieldDefs do
> >     begin
> >       Add(fldDate.Name, ftDate, 0, False);
> >       Update;
> >     end;
> > end;
> >
> >
> {-----------------------------------------------------------------------
> --
> > --
> > --
> >   Procedure: AddQueryIntegerField
> >   Author:    Michael Tuttle
> >   Date:      2001
> >   Purpose:
> >
> ------------------------------------------------------------------------
> --
> > --
> > -}
> > procedure TdtmAccountRem.AddQueryIntegerField(Query: TIBQuery;
> FldName:
> > String;
> >   FldKind: TFieldKind);
> > var
> >   fldIntegerField: TIntegerField;
> > begin
> >   fldIntegerField := TIntegerField.Create(Query);
> >
> >   with fldIntegerField do
> >     begin
> >       FieldName := FldName;
> >       FieldKind := FldKind;
> >       DisplayLabel := FieldName;
> >       DataSet := Query;
> >       Name := Query.Name + FieldName;
> >       ProviderFlags := [];
> >     end;
> >
> >   with Query.FieldDefs do
> >     begin
> >       Add(fldIntegerField.Name, ftInteger, 0, False);
> >       Update;
> >     end;
> > end;
> >
> > Here is an example call:
> > AddQueryIntegerField(qryAddress, PERSON_ID, fkData);
> >
> > Again create the query field first then the clientdataset field.  We
> do it
> > all the time.
> >
> > Good luck and let me know how this works out for you.
> >
> > Mike
> >
> > ----- Original Message -----
> > From: "Gies,Brad" <[EMAIL PROTECTED]>
> > To: "Delphi-Talk Discussion List" <[email protected]>
> > Sent: Monday, October 10, 2005 7:43 PM
> > Subject: RE: Adding a field to a ClientDataSet at runtime
> >
> >
> > > Mike,
> > >
> > > Are you sure about that? Reading the help for update sounds like it
> > > looks at the fields and updates the definitions according to the
> fields,
> > > not the fields according to the definitions. I'll try it anyway
> though.
> > >
> > > I have tried just creating a new TField Object and adding it to the
> > > ClientDataSet using the Fields.Add method, but when trying to add a
> > > value to the field it couldn't find it. I'm not sure why.
> > >
> > >
> > > Sincerely,
> > >
> > > Brad Gies
> > > -------------------------------------
> > > NLM Software
> > > Southfield, MI, USA
> > > -------------------------------------
> > >
> > >
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: [EMAIL PROTECTED] [mailto:delphi-talk-
> > > > [EMAIL PROTECTED] On Behalf Of M Tuttle (KS)
> > > > Sent: Monday, October 10, 2005 7:58 PM
> > > > To: Delphi-Talk Discussion List
> > > > Subject: Re: Adding a field to a ClientDataSet at runtime
> > > >
> > > > Something like this.  Do you also need to add these field to a
> query?
> > > >
> > > > Procedure SomeProcedure
> > > > var
> > > >   fldStringField: TStringField;
> > > >   fldIntegerField: TIntegerField;
> > > > begin
> > > >
> > > > with cdsAddress do
> > > > begin
> > > >       //* Add the persistent field
> > > >       with FieldDefs do
> > > >         begin
> > > >             fldIntegerField := TIntegerField.Create(cdsAddress);
> > > >            with fldIntegerField do
> > > >                 begin
> > > >                   FieldName := 'FIELD_NAME';
> > > >                   DisplayLabel := FieldName;
> > > >                   DataSet := cdsAddress;
> > > >                   Name := cdsAddress.Name + FieldName;
> > > >                   cdsAddress.FieldDefs.Add(fldIntegerField.Name,
> > > > ftInteger,
> > > > 0, False);
> > > >                 end;
> > > >
> > > >             fldStringField := TStringField.Create(cdsAddress);
> > > >             with fldStringField do
> > > >                 begin
> > > >                   FieldName := 'ANOTHER_FIELD_NAME';
> > > >                   DisplayLabel := FieldName;
> > > >                   DataSet := cdsAddress;
> > > >                   Name := cdsAddress.Name + FieldName;
> > > >                   cdsAddress.FieldDefs.Add(fldStringField.Name,
> > > ftString,
> > > > 1,
> > > > False);
> > > >                 end;
> > > >
> > > >           //* Update the field defs
> > > >           Update;
> > > >         end;
> > > >     end;
> > > > end:
> > > >
> > > > ----- Original Message -----
> > > > From: "Gies,Brad" <[EMAIL PROTECTED]>
> > > > To: "Delphi-Talk Discussion List" <[email protected]>
> > > > Sent: Monday, October 10, 2005 6:44 PM
> > > > Subject: Adding a field to a ClientDataSet at runtime
> > > >
> > > >
> > > > >
> > > > > Does anyone know how to add a new field to a ClientDataSet after
> the
> > > > > DataSet is already created? Is it possible?
> > > > >
> > > > > Sincerely,
> > > > >
> > > > > Brad Gies
> > > > > -------------------------------------
> > > > > NLM Software
> > > > > Southfield, MI, USA
> > > > > -------------------------------------
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > This e-mail is intended only for the person or entity to which
> it is
> > > > addressed and may
> > > > > contain confidential and/or privileged material.  Any review,
> > > > retransmission,
> > > > > dissemination or other use of, or taking of any action in
> reliance
> > > upon,
> > > > this information
> > > > > by persons or entities other than the intended recipient is
> > > prohibited.
> > > > If you
> > > > > received this message in error, please contact the sender
> > > immediately
> > > > and
> > > > delete
> > > > > the material from your computer.
> > > > > __________________________________________________
> > > > > Delphi-Talk mailing list -> [email protected]
> > > > > http://www.elists.org/mailman/listinfo/delphi-talk
> > > > >
> > > > >
> > > >
> > > >
> > > > __________________________________________________
> > > > Delphi-Talk mailing list -> [email protected]
> > > > http://www.elists.org/mailman/listinfo/delphi-talk
> > >
> > >
> > > This e-mail is intended only for the person or entity to which it is
> > addressed and may
> > > contain confidential and/or privileged material.  Any review,
> > retransmission,
> > > dissemination or other use of, or taking of any action in reliance
> upon,
> > this information
> > > by persons or entities other than the intended recipient is
> prohibited.
> > If you
> > > received this message in error, please contact the sender
> immediately
> > and
> > delete
> > > the material from your computer.
> > > __________________________________________________
> > > Delphi-Talk mailing list -> [email protected]
> > > http://www.elists.org/mailman/listinfo/delphi-talk
> > >
> > >
> >
> >
> > __________________________________________________
> > Delphi-Talk mailing list -> [email protected]
> > http://www.elists.org/mailman/listinfo/delphi-talk
>
>
> This e-mail is intended only for the person or entity to which it is
addressed and may
> contain confidential and/or privileged material.  Any review,
retransmission,
> dissemination or other use of, or taking of any action in reliance upon,
this information
> by persons or entities other than the intended recipient is prohibited.
If you
> received this message in error, please contact the sender immediately and
delete
> the material from your computer.
> __________________________________________________
> Delphi-Talk mailing list -> [email protected]
> http://www.elists.org/mailman/listinfo/delphi-talk
>
>


__________________________________________________
Delphi-Talk mailing list -> [email protected]
http://www.elists.org/mailman/listinfo/delphi-talk

Reply via email to