Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld über Parameter auf NULL setzen (https://www.delphipraxis.net/153143-feld-ueber-parameter-auf-null-setzen.html)

ele 22. Jul 2010 15:48

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

Feld über Parameter auf NULL setzen
 
Hallo,

Ich habe da mal wieder ein kleines Problem analog zu diesem Thread. Nur dass ich das über ADO anstatt über Zeos mache und die Datenbank dahinter MSSQL ist.

Zusammenfassung: Ich versuche ein Feld, in diesem Fall Released (datetime, allow nulls = true) über update auf null zu setzen. Ich könnte das natürlich auch direkt in SQL machen, würde aber den Weg über Parameter vorziehen.

Der Fehler:

Zitat:

Zitat von EVariantTypeCastError
Could not convert variant of type (Null) into type (Double)

Mein Code (Released ist ein TDateTime):

Delphi-Quellcode:
    Query.SQL.Text :=
          'UPDATE ChangeSets SET Author = :Author, Released = :Released WHERE ID = :ID';

    Query.Parameters.ParamValues['ID'] := ID;
    Query.Parameters.ParamValues['Author'] := Author;
    Query.Parameters.ParamValues['Released'] := IfThen(Released = 0, NULL, Released); // <-- Fehler hier
Ich habe auch verschiedene andere Varianten ausprobiert, die haben bisher aber nicht gefruchtet:

Delphi-Quellcode:
    Query.Parameters.ParamByName('Released').Value := IfThen(Released = 0, NULL, Released);
    Query.Parameters.FindParam('Released').Value := IfThen(Released = 0, NULL, Released);
Wie macht man das richtig?

ele 22. Jul 2010 15:55

AW: Feld über Parameter auf NULL setzen
 
:wall:

Oh, mann bin ich blöd. Das Problem liegt am IfThen... Es wird automatisch die Variante für TDateTime verwendet, welche dann natürlich mit dem NULL nichts anfangen kann.

Thread kann geschlossen werden. 'Tschuldigung für die Belästigung. :oops:

DeddyH 22. Jul 2010 15:57

AW: Feld über Parameter auf NULL setzen
 
IIRC musst Du die Clear-Methode des Parameters aufrufen.
Delphi-Quellcode:
Query.ParamByName('Bla').Clear;

ele 22. Jul 2010 16:01

AW: Feld über Parameter auf NULL setzen
 
Danke für den Hinweis, es funktionert aber auch mit NULL, nur halt nicht ganz so elegant über IfThen:

Delphi-Quellcode:
    if Released = 0
      then Query.Parameters.ParamValues['Released'] := NULL
      else Query.Parameters.ParamValues['Released'] := Released;


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