Problem mit TDateEdit

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Problem mit TDateEdit

Beitrag von charlytango »

Hi,

Seit jeher hab ich in Delphi oder Lazarus immer wieder mal Probleme mit TDateEdit Controls und deren Konsorten und Ablegern.
Im Moment nerven sie mich wieder mal.

Auf einem Formular klebt ein TDateEdit das ich validieren möchte.

Code: Alles auswählen

function TForm1.ValidateOneDateField(sDateString: string; sFieldname: string
  ): boolean;
var
  dTestDate:TDateTime;
begin
  result:=true;
  if trim(sDateString)<>'' then begin
    result:=tryStrToDate(sDateString,dTestDate);
    if not result then
       ShowMessage('Feld '+sFieldName+' enthält kein gültiges Datum ('+sDateString+')');
  end;
end;

procedure TForm1.btnTestClick(Sender: TObject);
begin
  if ValidateOneDateField(DateEdit1.Text,'Das Datumsfeld')  then
     showmessage('alles OK');
end;    
Alles keine Raketenwissenschaft, aber scheinbar weit gefehlt.
In der Testapplikation (Formular mit TDateEdit und einem Button btnTest mit dem validiert wird) klappt das wunderbar.
In meiner Produktivapplikation gibt es bei scheinbar leeren Feldern einen SIGSEV.
Das Initialisieren des Feldinhalts im OnCreate des Formulars mit

Code: Alles auswählen

DateEdit1.Text:='';
macht keinen Unterschied.

kennt jemand das Problem "aus der Hüfte"?
... bevor ich meine TestApp um das Formular erweitern muss? :cry:

THX

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Problem mit TDateEdit

Beitrag von Soner »

Man muss den Datensatz in Bearbeitungszustand versetzen, bevor man Werte zuweist.
Ich mache es immer so:

Code: Alles auswählen

if not (Query1.State in [dsEdit, dsInsert]) then Query1.Edit;
// .. hier Felder bearbeiten

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Problem mit TDateEdit

Beitrag von charlytango »

Soner hat geschrieben:
Do 10. Jun 2021, 10:30
Man muss den Datensatz in Bearbeitungszustand versetzen, bevor man Werte zuweist.
Das TDateEdit ist ein Control ohne jegliche Datenanbindung. Es ist einfach ein Eingabefeld für Datumswerte.


Ich bräuchte zumindestens eine verlässliche Methode zu detektieren ob die Eingabe leer ist bzw ob sich ein gültiger Wert drin befindet.

Denn diese Werte werden im Anschluss an die Validierung per Parameterzuweisung an ein SQL-Query übergeben.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Problem mit TDateEdit

Beitrag von Michl »

Wenn die Testapp funktioniert, dann ist der Fehler in der eigentlichen App zu suchen. Wenn dann weder Debugger noch sonstige Ideen helfen, würde ich das Programm clonen und immer mehr reduzieren, bis entweder der Fehler erkennbar oder eine Minimalapp da ist, die du dann hier zum Testen hochladen kannst. Alles andere wird schwierig.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Problem mit TDateEdit

Beitrag von charlytango »

Michl hat geschrieben:
Do 10. Jun 2021, 14:36
Wenn die Testapp funktioniert, dann ist der Fehler in der eigentlichen App zu suchen. Wenn dann weder Debugger noch sonstige Ideen helfen, würde ich das Programm clonen und immer mehr reduzieren, bis entweder der Fehler erkennbar oder eine Minimalapp da ist, die du dann hier zum Testen hochladen kannst. Alles andere wird schwierig.
hab ich schon befürchtet -- war der Versuche es zu vermeiden ;)
Na dann...here it Is:

EDIT: Mahh schäm... :oops: ... da weise ich doch glatt nil selbst zu weil ich es für einen Test anderer Datekomponenten brauchte -- schande-- danke für eure Zeit

Antworten