Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADD COLUMN mit Default-Wert klappt nicht (https://www.delphipraxis.net/142462-add-column-mit-default-wert-klappt-nicht.html)

Jürgen Thomas 28. Okt 2009 16:33

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBExpert Personal

ADD COLUMN mit Default-Wert klappt nicht
 
Hallo,

ich erweitere eine vorhandene Tabelle um eine Spalte:
SQL-Code:
alter table Mitarbeiter
  add Geschlecht CHAR(1)
      default 'W' not null
      constraint Mitarbeiter_Geschlecht check( Geschlecht = 'W' or Geschlecht = 'M');
Das wird so auch einwandfrei ausgeführt. Aber sollten die vorhandenen Datensätze nicht automatisch den Default-Wert 'W' erhalten? Tatsächlich wird '' (ein leerer String) eingetragen; ich habe ausdrücklich geprüft, dass es nicht NULL ist.

Ähnliche Diskussionen gab es z.B. unter spalte hinzufuegen inhalt der ds nicht null oder feld wird mit null gefuellt obwohl es nicht soll, aber ohne eine Erklärung, die mir hilft.

Es ist natürlich kein Problem, den Default-Wert mit einem einzelnen Update-Befehl nachzutragen; aber sollte das nicht sofort erledigt werden?

[Nachtrag] Oops, mit INTEGER klappte es wunderbar:
SQL-Code:
alter table Versicherungsvertrag
  add Basispraemie INTEGER
      default 500 not null
      constraint Vertrag_Basispraemie_Check check(Basispraemie > 0),
  add Praemiensatz INTEGER
      default 100 not NULL
      constraint Vertrag_Praemiensatz_Check check(Praemiensatz > 0),
  add Praemienaenderung DATE;
Was kann da wohl los sein?

Danke für Erläuterungen! Jürgen

tsteinmaurer 28. Okt 2009 20:30

Re: ADD COLUMN mit Default-Wert klappt nicht
 
Hallo Jürgen,

klappt bei mir mit Firebird 2.1.2 sowohl mit Database Workbench als auch mit isql. Bug in IBExpert, sofern du dieses Ergebnis in IBExpert siehst?

IBExpert 29. Okt 2009 14:26

Re: ADD COLUMN mit Default-Wert klappt nicht
 
Zitat:

Zitat von tsteinmaurer
Hallo Jürgen,

klappt bei mir mit Firebird 2.1.2 sowohl mit Database Workbench als auch mit isql. Bug in IBExpert, sofern du dieses Ergebnis in IBExpert siehst?

mal nicht alles gleich überinterpretieren, wenn die SQLs so wie beschrieben ausgeführt wurdenm dann macht auch IBExpert nichts anderes als isql oder dbw.
Wenn das reproduzierbar ist schau ich mir das gerne mal an, einfach per email an hklemt at ibexpert punkt com

tsteinmaurer 29. Okt 2009 14:44

Re: ADD COLUMN mit Default-Wert klappt nicht
 
Na Holger, ;-)

hätte Jürgen bei "Zugriff über" nicht IBExpert Personal, sondern etwas anderes angegeben gehabt, dann hätte ich den Hinweis gegeben, dass eben vielleicht dort das Problem liegt. Also, nicht gleich wieder die Messer wetzen. :-D

shmia 29. Okt 2009 15:35

Re: ADD COLUMN mit Default-Wert klappt nicht
 
Die Datenbank "weiss", dass wenn ein Datensatz eingefügt wird in dem das Feld Geschlecht fehlt,
dass das Feld den Defaultwert "W" erhalten soll.
SQL-Code:
INSERT INTO Mitarbeiter(Name, Strasse, Ort) VALUES('Merkel', 'Palast der Republik', 'Berlin')
Die Frage ist: Weiss das auch die Treiberschicht?
Dazu müsste der Treiber die Defaultklausel abfragen können und diese Information müsste
von den Zugriffskomponenten korrekt verarbeitet werden. (bei vielen Komponenten klappt das leider nicht)
Wenn nämlich im Hintergrund eine INSERT-Anweisung generiert wird, die das Feld Geschlecht enthält:
SQL-Code:
INSERT INTO Mitarbeiter(Name, Strasse, Ort, Geschlecht) VALUES('Merkel', 'Palast der Republik', 'Berlin', NULL)
dann kann die Default-Klausel nicht wirken.

Man kann das Problem umgehen, indem man den Defaultwert im Event AfterInsert setzt:
Delphi-Quellcode:
procedure TForm1.Query1AfterInsert(DataSet: TDataSet);
begin
   Dataset['Geschlecht'] := 'W'; // default
end;


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