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
