AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TPgIntervalField auf NULL setzen
Thema durchsuchen
Ansicht
Themen-Optionen

TPgIntervalField auf NULL setzen

Ein Thema von himitsu · begonnen am 7. Okt 2013 · letzter Beitrag vom 8. Okt 2013
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 16:49
Datenbank: postgres • Version: 9.1 • Zugriff über: PgDAC
Moin,

wie bekommt man soein TPgIntervalField eigentlich wieder leer, bzw. auf NULL gesetzt?

So geht es zwar:
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:
t_interval.Clear; // das Edit, bzw. ein DBLookupEdit
Sql.FieldByName('t_interval').Clear;
Sql.FieldByName('t_interval').AsString := '';
...
Der DB-Monitor zeigt auch an, daß immer nur das "alte" interne TPgInterval übertragen wird, egal was ich versuche.


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)
$2B or not $2B

Geändert von himitsu ( 7. Okt 2013 um 17:28 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 17:53
Funktioniert
Sql.FieldByName('t_interval').Value := NULL; ?
Markus Kinzler
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 17:54
Nur Sql.FieldByName('t_interval').Clear; 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 18:02
:= Null; hatte ich auch schon ausprobiert.
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 18:21
Ich habe gerade des öfteren gelesen, dass die Datatype 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.

Und dann noch etwas: Schonmal mit der TParam.Bound Eigenschaft rumgespielt, ob das was bringt? (Ebenfalls gerade mehrfach gelesen.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: TPgIntervalField auf NULL setzen

  Alt 7. Okt 2013, 18:57
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: TPgIntervalField auf NULL setzen

  Alt 8. Okt 2013, 14:45
nur nochmal Einiges aufgezählt:
Delphi-Quellcode:
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);
Sobald die Zeit auf "0" gesetzt wird, dann knallt es beim Post mit folgendem Fehler.
Zitat:
EPgError:
invalid input syntax for type interval: ""
Vorallem der Letzte versuchte das hinzubekommen, wie der Status vom TPgIntervalField ursprünglich ist, wenn das Feld schon als NULL aus der DB ausgelesen wurde.



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)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
193 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TPgIntervalField auf NULL setzen

  Alt 8. Okt 2013, 19:12
Vielleicht FieldByName(BlaBla').AsVariant := NULL ???
Thomas Forget
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 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