PDA

View Full Version : Defalut Werte werden bei write nicht gesetzt



Booley
20-09-07, 11:31
Hallo zusammen,

folgendes kleines Problem:
Ich habe eine PF angelegt, welche u.a. drei Felder mir Defalut-Werten hat:

Feld TDAT
Typ=DATE
Default-Wert= Aktuelles Datum
Kann Null=Nein

Feld TTIME
Typ = TIME
Default-Wert= Aktuelle Zeit
Kann Null=Nein


Feld TTIMESTAMP
Typ = TIMESTAMP
Default-Wert= Aktuelle Zeitmarke
Kann Null=Nein

Wenn ich mit SQL einen Datensatz einfüge, werden die Felder wie erwartet gefüllt. Wenn ich aus RPG einen Satz schreibe, stehen sie auf Inititalwerte. Also "01.01.01", "00:00" und "0001-01-01-00.00.00.000000"

Gehe ich recht in der Annahme, dass dies daran liegt, dass RPG zunächst einmal alle Felder initialsiert, damit die Felder nicht mehr NULL sind und somit die Default-Werte nicht greifen?

Kann ich das irgendwie ändern?

Ich habe das Problem erst einmal umgangen, indem ich die Werte zuweise. Das kann aber doch eigentlich nicht die Lösung sein...

Wer kann helfen?

Gruß
Booley

Fuerchau
20-09-07, 11:34
Vom Grundwert abweichende Defaults funktionieren nur mit SQL, da Defaults ausschließlich verwendet werden, wenn Felder beim INSERT nicht angegeben werden.

Da aber der RPG-Compiler zur Laufzeit alle Felder kennt, werden diese halt intern mit Defaults belegt und ausgegeben.

Booley
20-09-07, 11:36
Ja, so in der Art habe mir das schon gedacht...
Schade eigentlich.

Danke für die Schnelle Antwort.

Gruß
Booley

BenderD
20-09-07, 15:04
Hallo,

%nullind ist dein Freund

mfg

Dieter Bender


Vom Grundwert abweichende Defaults funktionieren nur mit SQL, da Defaults ausschließlich verwendet werden, wenn Felder beim INSERT nicht angegeben werden.

Da aber der RPG-Compiler zur Laufzeit alle Felder kennt, werden diese halt intern mit Defaults belegt und ausgegeben.

Booley
20-09-07, 15:44
%nullind ist dein Freund


Hallo Dieter,

das wäre natürlich eine Möglichkeit. Aber wenn ich die Felder eh anfassen muss, dann kann ich sie auch gleich füllen. :)

Ich hatte mehr auf sowas wie eine generelle Option gehofft, dass die Default-Werte berücksichtigt werden. Hat vielleicht jemand eine (nicht aufwendige) Idee, wie man alles Feldern eines Satzformats NULL zuweisen kann?

Egal, ist ja kein Beinbruch. Finde es halt nur einfach nicht schön.

Apropos schön: Einen schönen Feierabend schon mal!

Gruß
Booley

BenderD
20-09-07, 16:26
Hallo,

man kann natürlich auch eine View (oder DDS logische) verwenden, die diese Felder nicht enthält, dann funzt das voll elektrisch (beim insert).
BTW: füllen kann man das im RPG nicht gleichwertig, der hat keine Timestamps mit 6 Stellen nach dem Komma.

mfg

Dieter Bender


Hallo Dieter,

das wäre natürlich eine Möglichkeit. Aber wenn ich die Felder eh anfassen muss, dann kann ich sie auch gleich füllen. :)

Ich hatte mehr auf sowas wie eine generelle Option gehofft, dass die Default-Werte berücksichtigt werden. Hat vielleicht jemand eine (nicht aufwendige) Idee, wie man alles Feldern eines Satzformats NULL zuweisen kann?

Egal, ist ja kein Beinbruch. Finde es halt nur einfach nicht schön.

Apropos schön: Einen schönen Feierabend schon mal!

Gruß
Booley

Fuerchau
20-09-07, 17:16
Nur: %nullind (SQL mit Anzeiger) setzt den Wert NULL und nicht den Default !

Wenn im Feld NULL nicht erlaubt ist, gibts einen DB-Fehler "NULL in Spalte nicht erlaubt" beim schreiben.

Also entweder per SQL-Insert das Feld nicht erwähnen (dann gibts den Default) bzw. wie Dieter schon sagt, über eine LF schreiben, die diese Felder nicht enthält.

Booley
21-09-07, 07:53
Wow, so einen großen Aufwand wollte ich hier mit so einer "kleinen Pflanze" gar nicht verursachen...

Vielen Dank für die vielen Antworten. Die Idee mit der LF finde ich schon gut. Gerade, wenn man mehr als diese drei Feldchen hat, welche per Default bestückt werden sollen, oder man halt den gaaaaanz ganauen Timestamp benötigt.

Ich denke, wir können den Thread hier schließen.

Ein schönes Wochenende schon mal.

Booley