Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Char-Feld aus Datenbank vor Anzeige formatieren (https://www.delphipraxis.net/55128-char-feld-aus-datenbank-vor-anzeige-formatieren.html)

Tyler 17. Okt 2005 09:00

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:
    TNumericField( qMatBestand.FieldByName( 'bestelldat' ) ).DisplayFormat := 'dd.mm.yy';
Das ganze klappt nebenbei auch noch mit Feldern die Zahlen enthalten.

Nun will ich aber den Inhalt von Charfeldern, die _immer_ die Länge 9 haben, auf ähnliche Art formatieren:

Delphi-Quellcode:
aus 012345678 wird 012.345.678
aber auch abcdefgeh wird zu abc.def.geh
Heisst also, das Datenbankfeld ist vom Typ VARCHAR und enthält dementsprechend auch Strings aller Coleur.
TStringField bietet aber nicht die Eigenschaft "DisplayFormat". Habt ihr ne Idee, wie ich das realisieren könnte?

Danke euch!

marabu 17. Okt 2005 09:59

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:
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;
Grüße vom marabu

Tyler 17. Okt 2005 10:54

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 :)

marabu 17. Okt 2005 11:03

Re: Char-Feld aus Datenbank vor Anzeige formatieren
 
Kennst du schon das Ereignis OnGetText von TStringField?

marabu

Tyler 17. Okt 2005 11:17

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

Garby 17. Okt 2005 13:24

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;

Tyler 17. Okt 2005 16:12

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 07:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz