Neven, I have actually got it working... the critical bit (which is why it didnt work before) was the sequence and the fact that you have to create all the fields.
for qry prepare fielddefs.update create the new fielddef create all fields from fielddefs modify own field to make calculated open for tbl open close fielddefs.update create the new fielddef create all fields from fielddefs modify own field to make calculated open To: Multiple recipients of list delphi <[EMAIL PROTECTED]> Send reply to: [EMAIL PROTECTED] From: "Neven MacEwan" <[EMAIL PROTECTED]> Subject: Re: [DUG]: Adding Calculated Field Date sent: Fri, 13 Jun 2003 13:46:03 +1200 > Rohit > > To Create a single field you have to create all the fields, so you > can either use the IDE to create a persistant field defs as per your query > (I used to hate this in d5 because if a field changed in size the whole > thing would spit) > and then before you open the table programtically create your calc field > (as per the link I posted) or in your case as the query is dynamic you have > to > make all the fielddefs to match your query (see sample code below) > > The biggest problem with this is getting the metadata for the Field you > need to create (I manage this with a 'MetaEntity') but I'm sure you can come > up with > a solution. > > Does this make sense? > > Neven > > > procedure TmwkMemTable.MakeFields(var Fields: TmwkStringArray); > var > i: integer; > Field: TField; > FieldClass: TFieldClass; > FieldType: TFieldType; > MetaColumn: TmwkMetaColumn; > begin > Self.FieldDefs.Clear; > Self.Fields.Clear; > for i := low(Fields) to high(Fields) do > begin > MetaColumn := MetaEntity.ColumnByName(Fields[i]); > if MetaColumn = nil then Continue; > FieldType := MetaColumn.FieldType; > FieldClass := Self.GetFieldClass(FieldType); > if not assigned(FieldClass) then begin > Fields[i] := ''; > continue; > end; > Field := FieldClass.Create(Self); > if not assigned(Field) then break; > Field.FieldName := Fields[i]; > Field.FieldKind := fkData; > if MetaColumn.DataSize <> 0 then Field.Size := MetaColumn.DataSize; > Field.DataSet := Self; > Field.Name := Self.Name+Field.FieldName; > Self.FieldDefs.Add(Field.Name,FieldType,MetaColumn.DataSize,False); > end; > end; > > ----- Original Message ----- > From: "Rohit Gupta" <[EMAIL PROTECTED]> > To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]> > Sent: Friday, June 13, 2003 12:16 PM > Subject: Re: [DUG]: Adding Calculated Field > > > > I did some web searches and found scores of people with the same > > problem.... some with an identical requirement to me. Amidst the > > hundreds of rplies, I think I have a solution - I am about to create a > > test app. > > > > To: Multiple recipients of list delphi > > <[EMAIL PROTECTED]> > > Send reply to: [EMAIL PROTECTED] > > From: "Nello Sestini" <[EMAIL PROTECTED]> > > Subject: Re: [DUG]: Adding Calculated Field > > Date sent: Fri, 13 Jun 2003 06:50:20 +0700 > > > > > if you aren't using persistent fields then ISTR you can't > > > define calculated fields. > > > > > > is it possible to pre-define a few of these calculated > > > checkboxes (all handled by the same handler) and alter > > > their grid visibility on the fly instead of creating them? > > > > > > (i don't completely understand your problem so this may > > > be a miss) > > > > > > > > > -ns > > > http://www.roserox.co.th > > > > > > ----- Original Message ----- > > > From: "Rohit Gupta" <[EMAIL PROTECTED]> > > > To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]> > > > Sent: Friday, June 13, 2003 04:36 > > > Subject: Re: [DUG]: Adding Calculated Field > > > > > > > > > > Any other suggestions.. I am really stuck here... > > > > > > > > > > > > PROBLEM > > > > > > > > The only solution I have is to use a calculated field at run-time. I > cant > > > define > > > > persistent fields as the query changes depending on user input. The > list > > > from the qry > > > > gets displayed and the user needs to deselect some rows. > > > > > > > > If I have a calculated field linked to a checkbox - then when he > presses > > > space or dbl- > > > > clicks on that column, I can fire a separate qry to record this in an > > > exclusion table.... > > > > and because its a calculated field I can refresh the display to give > him > > > immediate > > > > feedback. if the exclusion table was joined to the query then I would > > > have to refresh > > > > the query which can take several minutes I would not be able to > provide > > > immediate > > > > feedback. > > > > > > > > The only other soultion would have been multiple inserts from an sql > > > statement - but > > > > that is not supported. Then I could have populated an inclusion table > > > instead. > > > > > > > > > How do I go about adding a calculated field to a dataset/grid at > > > run-time ? I > > > > > have tried various things - none of them work > > > > > > > > > > fielddefs.add > > > > > fielddefs.addfielddef > > > > > fields.add > > > > > Regards > > Regards > > Regards Rohit ==================================================== ================== CFL - Computer Fanatics Ltd. 21 Barry's Point Road, AKL, New Zealand PH (649) 489-2280 FX (649) 489-2290 email [EMAIL PROTECTED] or [EMAIL PROTECTED] ==================================================== ================== --------------------------------------------------------------------------- New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED] Website: http://www.delphi.org.nz To UnSub, send email to: [EMAIL PROTECTED] with body of "unsubscribe delphi" Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
