Autor Beitrag
[TP]Hawk274
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34



BeitragVerfasst: Di 10.12.02 10:49 
Ich ein DBEdit eine Datumsspalte zugeordnet. Ist es ratsam dafür ein Editmask festzulegen?
Nun aber mein Problem. Wenn ich in diesem DBEdit ein falsches Wert als Datum eingebe z.B. nur 50 (als Tag) und danach mit TAB rausgehe tritt immer eine EDBEditError( Ungültiger Eingabewert. Mit der Taste ESC machen Sie Änderungen rückgängig. ) Nun gut ... dann dachte ich ... gehst mal auf die Table Komponenten, wählst das Feld Datum aus und benutzt die Events OnValidate oder OnChange. Aber es die Exception tritt bereits früher auf. Wie kann man diese nun abfangen?
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 10.12.02 11:50 
Hi
Solche Fehler kannst du IMHO bei OnDataChange der DataSource abfangen. Wenn du mit persistenten Feldern arbeitest, kannst du auch OnValidate des Feldes verwenden.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
[TP]Hawk274 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34



BeitragVerfasst: Di 10.12.02 18:08 
Ich habe bereits OnValidate ausprobiert, aber hatte kein Erfolg. Der Fehler tritt noch früher auf.
Man musste im Prinzip die Funktion IsValidDate in eine Try Except Block ausführen. Vorher muss man noch das Jahr, den Monat und Tag ermitteln. Dazu habe ich die Funktion DecodeDate gefunden. Das würde vielleicht funktionieren. Aber leider weiß ich nicht wo ich den try except Block "hinschieben" soll!? Vielleicht hat jemand einen Vorschlag.

Wie ich der Hilfe entnehmen durfte wird übrigens OnDataChange nach OnValidate ausgeführt. Was irgendwie auch logisch klingt.
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 12:30 
Hi
ich habs gerade noch mal ausprobiert. Das OnValidate Ereignis ist schon die richtige Stelle. Wenn du in diesem Ereignis eine Exception auslöst, findet keine Aktualisierung der Datenmenge statt. Primitive Form:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.tblSaleDateValidate(Sender: TField);
var
  datum:  TDateTime;
begin
  try
    Datum := StrToDate(DBEdit1.EditText);
  except
  end;
end;

Tritt hier bei der Konvertierung ein Fehler auf, weil es kein gültiges Datum ist, wird die Datenmenge nicht aktualisiert und es wird auch keine Fehlermeldung ausgegeben. Dafür wärst du im Except-Block selbst zuständig.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
[TP]Hawk274 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34



BeitragVerfasst: Mi 11.12.02 18:12 
Bei mir erscheint trotzdem eine Exceptions. Hier mal der Quellcode ...
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Mask, DBCtrls;

type
  TForm1 = class(TForm)
    DBEdit1: TDBEdit;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    ADOTable1Geburtsdatum: TDateTimeField;
    DBEdit2: TDBEdit;
    procedure ADOTable1GeburtsdatumValidate(Sender: TField);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ADOTable1GeburtsdatumValidate(Sender: TField);
var
 datum:  TDateTime;
begin
 try
  Datum := StrToDate(DBEdit1.EditText);
 except
  on E: Exception do showmessage( E.Message );
 end;
end;

end.


Ich greife übrigens auf eine Access DB zu ... vielleicht hat das damit auch noch zu tun. :?: :?: :?:
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 12.12.02 10:02 
Hi
mit Access dürfte das wenig zu tun haben. Deshalb stell ich jetzt erst mal die ketzerische Frage:
Hast du das jemals ausserhalb der IDE getestet?
Wenn die Antwort darauf Nein ist, dann solltest du das mal schleunigst nachholen. :mgreen:

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...