![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: ibx
Im DBEdit ein String in ein Date umwandeln
Hallo Leute,
in meiner Firebird-Datenbank möchte ich ein Date-Feld über ein DBEdit füllen. Nun würde ich gern in das DBEdit auch ein 'h' eingeben können, welches dann in das aktuelle Datum umgewandelt wird. Analog dazu 'g' und 'm' für gestern und morgen. Ich versuche es mit dem onExit-Ereignis der DBEdit-Komponente wie folgt und erhalte beim Verlassen der DBEdit-Komponente eine Exception der Klasse EConvertError mit der Meldung ''h' ist kein gültiges Datum'.
Delphi-Quellcode:
Ersetze ich das 'h' durch '' und lasse das DBEdit frei, fügt mir meine Anwendung das aktuelle Datum ein!?
procedure TForm1.DBEditVDatumExit(Sender: TObject);
begin dat := DBEditVDatum.EditText; if dat = 'h' then DBEditVDatum.EditText := DateToStr( Date()); end; Kann mir jemand helfen? |
Re: Im DBEdit ein String in ein Date umwandeln
Versuche doch mal, in OnKeyPress den jeweiligen Buchstaben abzufangen.
|
Re: Im DBEdit ein String in ein Date umwandeln
Soll direkt nach Eingabe das Datum im Edit erscheinen oder beim Einfügen in die DB?
|
Re: Im DBEdit ein String in ein Date umwandeln
Danke bluesbaer,
Du hast mich auf den richtigen Weg gebracht. Mit onChange geht es jetzt:
Delphi-Quellcode:
So wird direkt bei der Eingabe das Datum umgewandelt.
procedure TForm1.DBEditVDatumChange(Sender: TObject);
begin dat := DBEditVDatum.EditText; if dat = 'h' then DBEditVDatum.EditText := DateToStr( Date()); if dat = 'm' then DBEditVDatum.EditText := DateToStr( Date()+1); if dat = 'g' then DBEditVDatum.EditText := DateToStr( Date()-1); end; |
Re: Im DBEdit ein String in ein Date umwandeln
Die technisch beste Lösung wäre, nicht am Control TDBEdit anzusetzen, sondern am Feld.
Dazu wird ein Eventhandler für OnSetText bereitgestellt:
Delphi-Quellcode:
Vorteil: das funktioniert jetzt nicht nur mit einem DBEdit sondern auch mit TDBGrid.
procedure TForm1.DateFieldOnSetText(Sender: TField; const Text: String);
begin if Text = 'h' then Sender.AsDateTime := DateToStr( Date()) else if Text = 'm' then Sender.AsDateTime := DateToStr( Date()+1.0) else if Text = 'g' then Sender.AsDateTime := DateToStr( Date()-1.0) else Sender.AsString := Text; end; Ausserdem ist es möglich alle Date-Felder über eine Schleife abzugrasen und den Eventhandler zuzuweisen. |
Re: Im DBEdit ein String in ein Date umwandeln
shmia, danke für den weiteren Tip. Es darf dann aber nicht mit DateToStr umgewandelt werden, sonst erhalte ich eine Fehlermeldung inkompatible Variablen-Typen
Delphi-Quellcode:
procedure TDataModule2.IBDataSetMainVERNICHTUNGSDATUMSetText(Sender: TField;
const Text: string); begin if Text = 'h' then Sender.AsDateTime := ( Date()) else if Text = 'm' then Sender.AsDateTime := ( Date()+1.0) else if Text = 'g' then Sender.AsDateTime := ( Date()-1.0) else Sender.AsString := Text; end; |
Re: Im DBEdit ein String in ein Date umwandeln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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