Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld wird mit NULL gefüllt obwohl es nicht soll (https://www.delphipraxis.net/119860-feld-wird-mit-null-gefuellt-obwohl-es-nicht-soll.html)

Mimm 2. Sep 2008 11:43

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX/ BDE

Feld wird mit NULL gefüllt obwohl es nicht soll
 
Hallo!

Systemumgebung:

Firebird 1.5 (Version 1.5.2.4731) auf Windows 2003 Server
Die Datenbank wurde von Interbase 5.6 auf Firebird importiert.
Da es ein schon etwas älteres, verteiltes System ist wird auf die Datenbank in einem Programm über die BDE zugegriffen. In dem Programm welches jedoch die Fehlermeldung wirft werde die Interbase Komponenten von Delphi 7 verwendet!

Das bestehende System wurde in einer Tabelle um ein weiteres Feld ergänzt. Oder einfach:
ALTER Tabelle1 ADD foobar TSTR255

Die Damain TSTR255 ist wie folgt in der DB deklariert:

CREATE DOMAIN TSTR255 AS
VARCHAR(255) CHARACTER SET ISO8859_1
DEFAULT ""
NOT NULL
COLLATE ISO8859_1

UPDATE Tabelle1 SET foobar = null

führt folgerichtig zu der Fehlermeldung:

The insert failed because a column definition includes validation constraints.
validation error for column STAPLER, value "*** null ***".

In die Tabelle1 werden Daten mittels
INSERT INTO Tabelle1 (Feld1, Feld2, Feld3) VALUES (1,2,3)
eingefügt. Dieser Aufruf ist in einer Storedprocedure hinterlegt und wird über die BDE aufgerufen. Nach dem Import der Daten hat das Feld foobar den Wert NULL.

Als wenn das nicht schon merkwürdig genüg wäre bekomme ich in ein einem anderen Prgramm bei einem Update auf die Tabelle1
die Fehlermeldung von oben "The insert faild because ..." In den anderen Programmen kommt die Meldung troz Update auf Tabelle1 nicht! Und nein das Feld foobar wird in diesem Programm nicht auf NULL gesetzt ;)

UPDATE Tabelle1 SET Field2 = 1 WHERE Field1 = <irgentwas>

Meine Frage ist warum und wie kann das Feld foobar "plötzlich" Null werden?
Ich habe auch versucht im Import das Feld fix über den INSERT Befehl mit einem Wert zu füllen:
INSERT INTO Tabelle1 (Feld1, Feld2, Feld3, foobar) VALUES (1,2,3, "")
aber auch dies brachte keine Erfolg.

Für eine Idee woran das liegt wäre ich dankbar.

Gruß

Michael M.

mkinzler 2. Sep 2008 12:07

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Lass dir mal von einem SQL-Monitor anzeigen, welceh Befehle genau abgesetzt werden.

Hansa 2. Sep 2008 12:14

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei der BDE kommt ein Fehler und sonst nicht, oder wie ? Falls ja, dann erübrigt sich die Fehlersuche bereits. 8) Ich habe genau das gemacht, wie Du es beschrieben hast. Unterschied : FB 2. Keine SP. Das Insert wurde mit IBExpert gemacht, also indirekt mit FIBPlus. Zumindest ohne BDE. Ergebnis : siehe Anhang. Für die SP kann sowieso keine Domain verwendet weren. Zumindest bei FB <= 2. Poste besser mal die. Da kann keine Domain vorhanden sein, insofern nützt die Domain rein gar nichts.

P.S.: der Datensatz mit dem ed3, der war vor anlegen des neuen Feldes bereits da. Der 2. wurde so eingefügt :

SQL-Code:
INSERT INTO TEST (NR) VALUES (1)

Mimm 2. Sep 2008 12:28

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
@mkinzler

Zitat:

UPDATE Tabelle1 SET Field2 = 1 WHERE Field1 = <irgentwas>
bis auf das <irgentwas> ist dieser SQL Befehl Fix im Code.

@Hansa

Nein das Programm welches die Fehlermeldung bringt ist mit IBX zur DB Verbunden.
Schon klar das die Übergabe bei der SP ohne Domain läuft.
Die Domain sollte in sofern was bringen, dass bei dem Insert kein NULL sonder der Default Wert übergeben wird. Wie in deinem Beispiel. Achja und das dort keiner NULL reinschreibt natürlich. ;)

Gruß

Michael M.

mkinzler 2. Sep 2008 12:31

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Du setzt diese Abfrage so ab. Aber wird sie auch o an die DB geschickt?

Mimm 2. Sep 2008 12:40

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
:wiejetzt:
Ich hoffe doch sehr wenn ich die so abschicke, dass diese dann auch so an die Datenbank ankommt.

mkinzler 2. Sep 2008 12:42

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Dann schau dir mal mit einem Monitor an, was so alles (zusätzlich) gesendet wird

Hansa 2. Sep 2008 12:42

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Unsinnige Eingaben kann man zumindest so abfangen :

SQL-Code:
ALTER TABLE TEST ADD CONSTRAINT CHK1_TEST check (NOT (FOOBAR IS NULL));
Auch per SP. Default geht so aber nicht. Dafür nimmt man dann notfalls einen Trigger. Mache auch mal endlich das, was mkinzler sagt. Wer weiß ? :shock:

Mimm 3. Sep 2008 15:52

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Tjo manche Probleme darf man einfach nicht bei der Lösung stören.
Denn nun funktionierts so wie es sollte geändert wurde jedoch nichts.

Danke für eure Mühen.

Gruß

Michael M.

PS:
Einen SQL Monitor für Firebird ohne an den Clients was anzupassen oder dem Server eine Art Proxy vorzuschalten gibt es nicht?
Also quasi einen SQL Profiler wie von MS. *duckundweg*

Hansa 3. Sep 2008 18:00

Re: Feld wird mit NULL gefüllt obwohl es nicht soll
 
Zitat:

Zitat von Mimm
Tjo manche Probleme darf man einfach nicht bei der Lösung stören...geändert wurde jedoch nichts.

Tjo, dann viel Vergnügen bis zum nächsten Fehler. Die haben nämlich immer eine Ursache. :mrgreen:


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