![]() |
Datenbank: postgres • Version: 9.1 • Zugriff über: PgDAC
TPgIntervalField auf NULL setzen
Moin,
wie bekommt man soein TPgIntervalField eigentlich wieder leer, bzw. auf NULL gesetzt? So geht es zwar:
SQL-Code:
.
UPDATE test SET t_interval = NULL WHERE t_id = 3
Aber wie geht das in einem TPgQuery, bzw. über die angehängten Edits/Grids?
Delphi-Quellcode:
Der DB-Monitor zeigt auch an, daß immer nur das "alte" interne TPgInterval übertragen wird, egal was ich versuche.
t_interval.Clear; // das Edit, bzw. ein DBLookupEdit
Sql.FieldByName('t_interval').Clear; Sql.FieldByName('t_interval').AsString := ''; ... Man kann das feld z.B. im Grid leer machen und Posten, aber nach dem Refresh ist der alte Wert wieder da. Andere Intervalle lassen sich problemlos eintragen, nur das NULL nicht. Und sowas wie "0 mons" nimmt der Parser auch nicht an und es knallt beim Posten. Solange das Feld leer ist, gibt es keine Probleme, aber wenn einmal was drin steht, dann bekomm ich das nicht mehr weg. [edit] Vermuten tun wir allerdings jetzt erstmal einen BUG im PgDAC. (DevExpress spielt zwar auch mit, aber da vermutlich nicht) |
AW: TPgIntervalField auf NULL setzen
Funktioniert
Delphi-Quellcode:
?
Sql.FieldByName('t_interval').Value := NULL;
|
AW: TPgIntervalField auf NULL setzen
Nur
Delphi-Quellcode:
und dann ein Post funktioniert nicht? Normalerweise ist das ja die übliche Vorgehensweise um NULL Werte zu setzen. Ob das bei Postgres bzw. der TSQL Komponente anders ist weiß ich allerdings auch nicht.
Sql.FieldByName('t_interval').Clear;
|
AW: TPgIntervalField auf NULL setzen
Delphi-Quellcode:
hatte ich auch schon ausprobiert.
:= Null;
Also alles Einzeln und auch Mehreres zusammen und direkt danach ein Post. Nichts geht. Ein IsNull meint zwar noch kurz vor dem Post, daß es nun Null sei und ohne Refresh ist das Feld auch "leer", aber ein Blick in die Datenbank, bzw. nach einem Refresh/RefreshRecord ist es wieder da. |
AW: TPgIntervalField auf NULL setzen
Ich habe gerade des öfteren gelesen, dass die
Delphi-Quellcode:
Eigenschaft des Feldes vorher festgelegt werden soll, damit das funktioniert. Ob das hier jetzt weiterhilft bzw. das überhaupt stimmt kann ich natürlich nicht sagen.
Datatype
Und dann noch etwas: Schonmal mit der ![]() |
AW: TPgIntervalField auf NULL setzen
Bound ist eh nur ein Getter und mehr als Lesen kann man damit also nicht.
Außerdem werden die Insert/Update/Delete-statements, sowie deren Parameter stantardmäßig automatisch vom TPgQuery erzeugt. Da kommt man so auch nicht so leicht ran, ohne wieder alles selberzumachen. Der DataType wird vom TPgIntervalField im Constructor gesetzt. (ftPgInterval = 106) Sobald einmal diese interne TPgInterval-Instanz erstellt wurde (wenn nicht NULL), dann geht die einfach nicht mehr weg. |
AW: TPgIntervalField auf NULL setzen
nur nochmal Einiges aufgezählt:
Delphi-Quellcode:
Sobald die Zeit auf "0" gesetzt wird, dann knallt es beim Post mit folgendem Fehler.
Sql.FieldByName('t_interval').AsString := '';
Sql.FieldByName('t_interval').AsString := '00:00:00'; Sql.FieldByName('t_interval').Clear; with (Sql.FieldByName('t_interval') as TPgIntervalField).AsPgInterval do begin MonthsFull := 0; Days := 0; SecondsFull := 0; end; Sql.FieldByName('t_interval').SetData(nil, True); Zitat:
Nja, außer einer Meldung an DavArt (PgDAC) und zu warten wann der Fehler behoben wird, scheint wohl nicht möglich zu sein. Ich hab in unserem Projekt erstmal aufgegeben und neben die Felder einen Button gemacht, welcher direkt das Update-Statement zur Datenbank schickt. (das Update- und Insert-Statement manuell zu erstellen und das nicht vom PgDAC erledigen zu lassen ist hier keine so schöne Variante, da diese praktisch überall automatisch generiert werden und wir bei Änderungen diese Statements ganz bestimmt übersehn würden) |
AW: TPgIntervalField auf NULL setzen
Vielleicht FieldByName(BlaBla').AsVariant := NULL ???
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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