Login ProductsSalesSupportDownloadsAbout |
Home » Technical Support » ElevateDB Technical Support » Support Forums » ElevateDB General » View Thread |
Messages 1 to 9 of 9 total |
TABLE OnGetText (handle null or 0 date display) |
Tue, Jan 9 2024 12:35 AM | Permanent Link |
Andrew Hill | If I use Field InvoiceDate OnGetText it fails (data disappears)
... for i:= 0 to tblPurchases.FieldDefs.Count -1 do begin try fld:= tblPurchases.FieldDefs.Items[i].CreateField(tblPurchases); // reusing fld over and over ??? // if UpperCase(fld.FullName) = UpperCase('InvoiceDate') then begin TDateTimeField(fld).OnGetText:= GetText2; end; ... procedure TUniMainModule.GetText2(Sender: TField; var Text: String; DisplayText: Boolean); begin if TField(Sender).AsDateTime < EncodeDate(1900, 1, 1) then begin Text:= ''; DisplayText:= False; end else begin Text:= DateToStr(TField(Sender).AsDateTime); DisplayText:= True; end; end; |
Tue, Jan 9 2024 3:15 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Andrew
I'm very puzzled. I don't know if its just my newsreader but it doesn't look as though you're assigning the address of GetText2 to OnGetText. I also can't understand the loop. A table can only have one column called InvoiceDate so why not just address it directly? Roy Lambert |
Tue, Jan 9 2024 3:36 PM | Permanent Link |
Andrew Hill | Roy, my idea was to paint Date.Text blank when date is null or pre 1900 (instead of 31/12/1899) - of course all NumericField code works correctly but when DateTimeField is involved it strips out all data.
// Set Persistent Float Field Display Text for i:= 0 to tblPurchases.FieldDefs.Count -1 do begin try fld:= tblPurchases.FieldDefs.Items[i].CreateField(tblPurchases); // reusing fld over and over ??? // if UpperCase(fld.FullName) = UpperCase('InvoiceDate') then begin // TDateTimeField(fld).OnGetText:= GetText2; end; // if UpperCase(fld.FullName) = UpperCase('Amount') then begin TNumericField(fld).DisplayFormat:= '######.##'; TNumericField(fld).OnGetText:= GetText; end; // if UpperCase(fld.FullName) = UpperCase('GST') then begin TNumericField(fld).DisplayFormat:= '######.##'; TNumericField(fld).OnGetText:= GetText; end; // if UpperCase(fld.FullName) = UpperCase('Adjustment') then begin TNumericField(fld).DisplayFormat:= '######.##'; TNumericField(fld).OnGetText:= GetText; end; // if UpperCase(fld.FullName) = UpperCase('Paid') then begin TNumericField(fld).DisplayFormat:= '######.##'; TNumericField(fld).OnGetText:= GetText; end; // if UpperCase(fld.FullName) = UpperCase('ReconciledDate') then begin // TDateTimeField(fld).OnGetText:= GetText2; end; // if UpperCase(fld.FullName) = UpperCase('Owing') then begin TNumericField(fld).DisplayFormat:= '######.##'; TNumericField(fld).OnGetText:= GetText; end; // except on E: Exception do begin s:= E.Message; end; end; // end; // for tblPurchases.FieldDefs.Update; |
Wed, Jan 10 2024 5:28 AM | Permanent Link |
Andrew Hill | Tim, would you care to wade in - Thanks - Andy
|
Wed, Jan 10 2024 7:28 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Andrew
Just so you know this is Delphi not ElevateDB.I know I had problems with a component where I did this and I'll have a look this afternoon Roy Lambert |
Wed, Jan 10 2024 8:27 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Andrew
I've been having a look and I've made a couple of changes to your code - see below. I'm on an old version of Delphi (D2007) which may or may not be significant, but the code works and I get exactly what I'd expect to see. procedure TForm1.GetText2(Sender: TField; var Text: string; DisplayText: Boolean); begin if Sender.AsDateTime < EncodeDate(2020, 1, 1) then begin Text := ''; DisplayText := True; <<<<<<<<<<<<<<<<<<<<<<<< end else begin Text := DateToStr(Sender.AsDateTime); DisplayText := True; end; end; procedure TForm1.FormCreate(Sender: TObject); var i: integer; fld: TField; begin Test.FieldDefs.Update; <<<<<<<<<<<<<<<<<<<<<< for i := 0 to Test.FieldDefs.Count - 1 do begin fld := Test.FieldDefs.Items[i].CreateField(Test); // reusing fld over and over ??? // if UpperCase(fld.FullName) = UpperCase('_Date') then TDateTimeField(fld).OnGetText := GetText2; end; Test.Open; end; Roy Lambert |
Wed, Jan 10 2024 3:03 PM | Permanent Link |
Andrew Hill | Roy, either way once "TDateTimeField(fld).OnGetText:=" is set then all data disappears.
Debugging shows GetText2 firing and setting text as expected but no data is shown from table ???. I even tried this procedure TUniMainModule.GetText2(Sender: TField; var Text: String; DisplayText: Boolean); begin Exit; <<<<<<<<<<<< if Sender.AsDateTime < TestDateTime then begin Text:= ''; DisplayText:= True; end else begin Text:= DateToStr(Sender.AsDateTime); DisplayText:= True; end; end; |
Wed, Jan 10 2024 3:57 PM | Permanent Link |
Andrew Hill | OK, this is what is killing it
reusing fld over and over |
Thu, Jan 11 2024 2:51 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Andrew
Its not something I tested for but when I think about it only the last instance would probably "stick". At least you've solved the problem. Roy Lambert |
This web page was last updated on Tuesday, September 17, 2024 at 04:19 AM | Privacy PolicySite Map © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? E-mail us at info@elevatesoft.com |