AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Char-Feld aus Datenbank vor Anzeige formatieren
Thema durchsuchen
Ansicht
Themen-Optionen

Char-Feld aus Datenbank vor Anzeige formatieren

Offene Frage von "Tyler"
Ein Thema von Tyler · begonnen am 17. Okt 2005 · letzter Beitrag vom 17. Okt 2005
Antwort Antwort
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 10:00
Datenbank: MySQL • Version: 4 • Zugriff über: ZEOS
Ahoi

bekanntlich kann ich ja die Anzeige von Datums-Feldern mit folgender Zeile entsprechend meinen Wünschen formatieren:

    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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 10:59
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
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#3

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 11:54
Danke für den Code, aber wie krieg ich diese Formatierung jetzt in mein DB-Edit? Das Feld soll ja "live" so angezeigt werden
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 12:03
Kennst du schon das Ereignis OnGetText von TStringField?

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#5

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 12:17
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
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 14:24
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;
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#7

Re: Char-Feld aus Datenbank vor Anzeige formatieren

  Alt 17. Okt 2005, 17:12
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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