![]() |
Datenbank: MySQL • Version: 4 • Zugriff über: ZEOS
Char-Feld aus Datenbank vor Anzeige formatieren
Ahoi
bekanntlich kann ich ja die Anzeige von Datums-Feldern mit folgender Zeile entsprechend meinen Wünschen formatieren:
Delphi-Quellcode:
Das ganze klappt nebenbei auch noch mit Feldern die Zahlen enthalten.
TNumericField( qMatBestand.FieldByName( 'bestelldat' ) ).DisplayFormat := 'dd.mm.yy';
Nun will ich aber den Inhalt von Charfeldern, die _immer_ die Länge 9 haben, auf ähnliche Art formatieren:
Delphi-Quellcode:
Heisst also, das Datenbankfeld ist vom Typ VARCHAR und enthält dementsprechend auch Strings aller Coleur.
aus 012345678 wird 012.345.678
aber auch abcdefgeh wird zu abc.def.geh TStringField bietet aber nicht die Eigenschaft "DisplayFormat". Habt ihr ne Idee, wie ich das realisieren könnte? Danke euch! |
Re: Char-Feld aus Datenbank vor Anzeige formatieren
Hallo Tyler,
speziell für die Formatierung von Zeichenketten fester Länge verwende ich folgenden Code:
Delphi-Quellcode:
Grüße vom marabu
function Strip(var S: String; sChars: string): string;
var i: integer; begin Result := ''; i := 1; while (I <= Length(S)) and (Pos(S[i], sChars) > 0) do Inc(i); if i > 1 then begin Result := Copy(S, 1, Pred(i)); S := Copy(S, i, Length(S) - Length(Result)); end; end; function Reformat(s, inForm, outForm: string): string; var sTemp, sPattern: string; i: integer; begin sTemp := ''; while (outForm <> '') do begin sPattern := Strip(outForm, outForm[1]); i := Pos(sPattern, inForm); if (i = 0) then sTemp := sTemp + sPattern else sTemp := sTemp + Copy(s, Pos(sPattern, inForm), Length(sPattern)); end; Result := sTemp; end; procedure TDemoForm.FormatButtonClick(Sender: TObject); begin ShowMessage(Reformat('abcdefghi', '111222333', '111.222.333')); end; |
Re: Char-Feld aus Datenbank vor Anzeige formatieren
Danke für den Code, aber wie krieg ich diese Formatierung jetzt in mein DB-Edit? Das Feld soll ja "live" so angezeigt werden :)
|
Re: Char-Feld aus Datenbank vor Anzeige formatieren
Kennst du schon das Ereignis OnGetText von TStringField?
marabu |
Re: Char-Feld aus Datenbank vor Anzeige formatieren
Ja, aber ich hab das in meinem Programm etwas anders gemacht: Die Query wird nicht zur Entwicklung mit Feldern gefülllt. Ich übergebe einfach den SQL_String und verbinde über eine DataSource-Kompente die Query mit meinem DBGrid. Viel mehr läuft da nicht. Bitte sag jetzt nicht, dass sei Kukolores :D
|
Re: Char-Feld aus Datenbank vor Anzeige formatieren
Hallo,
du kannst das Ereignis doch im AfterOpen der Query setzen.
Delphi-Quellcode:
TForm1 = class(TForm)
Query1: TQuery; procedure Query1AfterOpen(DataSet: TDataSet); private procedure Query1DATUMGetText(Sender: TField; var Text: String; DisplayText: Boolean); .... procedure TForm1.Query1DATUMGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := FormatText(Text); end; procedure TForm1.Query1AfterOpen(DataSet: TDataSet); begin DataSet.FieldByName('DATUM').OnGetText := Query1DATUMGetText; end; |
Re: Char-Feld aus Datenbank vor Anzeige formatieren
OK, Alles klar - da stand ich ein wenig auf dem Schlauch. Im OnOpen formatiere ich ja auch meine Datumsfelder - hätte ich eigentlich selber drauf kommen müssen, danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz