AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADD COLUMN mit Default-Wert klappt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

ADD COLUMN mit Default-Wert klappt nicht

Ein Thema von Jürgen Thomas · begonnen am 28. Okt 2009 · letzter Beitrag vom 29. Okt 2009
Antwort Antwort
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

ADD COLUMN mit Default-Wert klappt nicht

  Alt 28. Okt 2009, 16:33
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBExpert Personal
Hallo,

ich erweitere eine vorhandene Tabelle um eine Spalte:
SQL-Code:
alter table Mitarbeiter
  add Geschlecht CHAR(1)
      default 'Wnot null
      constraint Mitarbeiter_Geschlecht check( Geschlecht = 'Wor 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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#2

Re: ADD COLUMN mit Default-Wert klappt nicht

  Alt 28. Okt 2009, 20:30
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?
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#3

Re: ADD COLUMN mit Default-Wert klappt nicht

  Alt 29. Okt 2009, 14:26
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
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#4

Re: ADD COLUMN mit Default-Wert klappt nicht

  Alt 29. Okt 2009, 14:44
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: ADD COLUMN mit Default-Wert klappt nicht

  Alt 29. Okt 2009, 15:35
Die Datenbank "weiss", dass wenn ein Datensatz eingefügt wird in dem das Feld Geschlecht fehlt,
dass das Feld den Defaultwert "W" erhalten soll.
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:
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;
Andreas
  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 12:28 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