![]() |
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:
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.
alter table Mitarbeiter
add Geschlecht CHAR(1) default 'W' not null constraint Mitarbeiter_Geschlecht check( Geschlecht = 'W' or Geschlecht = 'M'); Ähnliche Diskussionen gab es z.B. unter ![]() ![]() 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:
Was kann da wohl los sein?
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; Danke für Erläuterungen! Jürgen |
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? |
Re: ADD COLUMN mit Default-Wert klappt nicht
Zitat:
Wenn das reproduzierbar ist schau ich mir das gerne mal an, einfach per email an hklemt at ibexpert punkt com |
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 |
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:
Die Frage ist: Weiss das auch die Treiberschicht?
INSERT INTO Mitarbeiter(Name, Strasse, Ort) VALUES('Merkel', 'Palast der Republik', 'Berlin')
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:
dann kann die Default-Klausel nicht wirken.
INSERT INTO Mitarbeiter(Name, Strasse, Ort, Geschlecht) VALUES('Merkel', 'Palast der Republik', 'Berlin', NULL)
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 01:23 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