Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Im DBEdit ein String in ein Date umwandeln (https://www.delphipraxis.net/114133-im-dbedit-ein-string-ein-date-umwandeln.html)

ickehausen 20. Mai 2008 12:06

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:
procedure TForm1.DBEditVDatumExit(Sender: TObject);
begin
  dat := DBEditVDatum.EditText;
  if dat = 'h' then
    DBEditVDatum.EditText := DateToStr( Date());
end;
Ersetze ich das 'h' durch '' und lasse das DBEdit frei, fügt mir meine Anwendung das aktuelle Datum ein!?

Kann mir jemand helfen?

bluesbear 20. Mai 2008 12:13

Re: Im DBEdit ein String in ein Date umwandeln
 
Versuche doch mal, in OnKeyPress den jeweiligen Buchstaben abzufangen.

mkinzler 20. Mai 2008 12:18

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?

ickehausen 20. Mai 2008 12:26

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:
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;
So wird direkt bei der Eingabe das Datum umgewandelt.

shmia 20. Mai 2008 12:39

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:
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;
Vorteil: das funktioniert jetzt nicht nur mit einem DBEdit sondern auch mit TDBGrid.
Ausserdem ist es möglich alle Date-Felder über eine Schleife abzugrasen und den Eventhandler zuzuweisen.

ickehausen 20. Mai 2008 13:42

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;

shmia 20. Mai 2008 13:46

Re: Im DBEdit ein String in ein Date umwandeln
 
Zitat:

Zitat von ickehausen
Es darf dann aber nicht mit DateToStr umgewandelt werden, sonst erhalte ich eine Fehlermeldung inkompatible Variablen-Typen

Ja, klar. Ich tippe meinen Code meistens ungetestet ein, da kann sowas schol mal passieren. :? :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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