Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   OnBeforePost mit NULL Value? (https://www.delphipraxis.net/213452-onbeforepost-mit-null-value.html)

wschrabi 1. Aug 2023 14:14

Datenbank: MariaDB • Version: 10.3.28 • Zugriff über: UniDAC

OnBeforePost mit NULL Value?
 
Hi
Ich habe eine FRAGE zu MariaDB und den Typ DATETIME.
Ich habe eine DBGrid, wenn ich die dort über den Navigator ein EDIT mache, kommt immer dass für EntryDateTime der Type '' nicht ok sei. ICh habe mir gedacht, in dem Handler OnBeforePost da eine IF Abfrage, wenn die Cell leer ist, dann soll für das Feld ENTRYDATETIME ein NULL reingeschrieben werden. Doch wie ändert man das DATASET mit FIELDNAME = 'EntryDateTime' zu NULL ????
Bei MySQL 5.7 war das kein Problem, der hat einfach auch ein '' in das DATETIME hinengebuttet.
Nachtrag: geht das so irgenwie?

Delphi-Quellcode:
procedure tMyTableBeforePost(Dataset: TDataset);
begin
  if Dataset.fieldbyname('EntryDateTime').asstring = '' then
    Dataset.fieldbyname('EntryDateTime').clear ;
end;

DANKE

Delphi.Narium 1. Aug 2023 14:58

AW: OnBeforePost mit NULL Value?
 
Funktioniert es damit?
Delphi-Quellcode:
procedure tMyTableBeforePost(Dataset: TDataset);
begin
  if Dataset.fieldbyname('EntryDateTime').asstring = '' then
    Dataset.fieldbyname('EntryDateTime').Value := EmptyParam;
end;
(Bei Delphi 7 ist EmptyParam in der Unit Variants deklariert.)

Uwe Raabe 1. Aug 2023 15:13

AW: OnBeforePost mit NULL Value?
 
Clear ist an sich genau der richtige Weg ein Feld auf NULL zu setzen.

himitsu 1. Aug 2023 15:26

AW: OnBeforePost mit NULL Value?
 
jupp
Delphi-Quellcode:
Dataset.fieldbyname('EntryDateTime').Clear;
// oder
Dataset.fieldbyname('EntryDateTime').Value := Null;
Clear geht fast immer.
Null zickt bei Blobs gerne rum.



EmptyParams ist "eigentlich" für Parameter, aber das ist ein Field.

Clear = NULL = varNull (VarIsNull)
Empty = varEmpty = ein nicht zugewiesender Variant (VarIsEmpty)
EmptyParams = varError+VAR_PARAMNOTFOUND (VarIsError)

Ist ja fast so pervers, wie diese kranke Pseudokonstante EmptyStr, anstatt einem ''.




Außerdem sollte UniDAC ein Setting haben, um "LeerStrings" als NULL zu speichern. (also im BeforePost automatisch umzuwandeln).

Vemutlich an der Query-Komponente (notfalls auch mal an der Connection nachsehn)

[add]
SetEmptyStrToNull -> https://www.componentsource.com/prod...eleases?page=3

Sinspin 1. Aug 2023 18:34

AW: OnBeforePost mit NULL Value?
 
Kommt die Fehlermeldung bei Posten oder beim Aufruf von Edit?
Verwirrenderweise schreibst Du zwar dass Du Edit aufrufst, dann aber was in OnBeforePost machen willst.

Zitat:

Zitat von wschrabi (Beitrag 1525116)
... Navigator ein EDIT mache, kommt immer dass für EntryDateTime der Type '' nicht ok sei. ...

Was ist denn eigentlich die Fehlermeldung? "nicht ok" ist jedenfalls keine Meldung, und hilft Null um herauszufinden was schief geht.

himitsu 1. Aug 2023 19:11

AW: OnBeforePost mit NULL Value?
 
Zitat:

Nachtrag: geht das so irgenwie?
Delphi-Quellcode:
procedure tMyTableBeforePost(Dataset: TDataset);
begin
  if Dataset.fieldbyname('EntryDateTime').asstring = '' then
    Dataset.fieldbyname('EntryDateTime').clear ;
end;

Das Feld ist wirklich ein DATETIME, TIMESTAMP, oder sowas, also z.B. ein Delphi-Referenz durchsuchenTDateTimeField?
Dann liefert AsString immer einen DatumsString, außer das Feld ist NULL, wo es einen Leerstring zurück gibt.

Somit trifft dieses IF immer nur, wenn es bereist NULL ist und noch mehr NULL als NULL geht nicht,
weshalb Clear nichts ändern wird, da es funktional effektiv Folgendes ergäbe:
Delphi-Quellcode:
if Dataset.FieldByName('EntryDateTime').IsNull then
  Dataset.FieldByName('EntryDateTime').Clear; // aka Dataset.FieldByName('EntryDateTime').Value := Null;


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