![]() |
Datenbank: ads • Version: 10 • Zugriff über: TDatasetDescendant
Advantage Database - Null-Werte
Hallo,
ich habe eine Tabelle in der ein Char-Feld mit NOT NULL und Default-Wert '' definiert ist. Nun habe ich folgendes Problem: Wenn ich in einer Delphi-Anwendung dies Tabelle öffne und das Feld auf Null prüfe (adsTable1.FieldByName('Feld').IsNull), bekomme ich ein "True" zurück. Wenn ich aber im DataArchitect die Abfrag "Select * FROM Table WHERE Feld IS NULL" ausführe, bekomme ich 0 Datensätze geliefert. Hat jemand eine Erklärung wie das sein kann? Danke! |
AW: Advantage Database - Null-Werte
da haben wohl die ADS-Kompos nen kleinen Bug.
Poste das doch mal in deren Forum. |
AW: Advantage Database - Null-Werte
Dann hat u definiert, dass '' delphiseitig als Null zu betrachten ist.
|
AW: Advantage Database - Null-Werte
Hi und danke für eure Antworten.
Hm also irgendwas passt da nicht so ganz. Ich habe gerade nochmal ein Test gemacht und eune neue Tabelle angelegt. Bei der hat mir dann "isNull" das korrekte Ergebis geliefert. Einziger Unterschied war, das das Feld in der Test-Tabelle vom Typ "character" statt "nvarchar" ist. Also nochmal eine Tabelle erstellt mit Feld 1 als Char NOT NULL und Default '' und Feld 2 als NVarChar NOT NULL und Default ''. Dann über delphi einen Datensatz angelegt und beide Felder nicht befüllt. Und tatsächlich: adsTable1.FieldByName('test1').IsNull = False (korrekt) adsTable1.FieldByName('test1').IsNull = True (Falsch) hm :/ |
AW: Advantage Database - Null-Werte
nvarchar (Unicode) kann ADS noch nicht lange. Wird vermutlich hier ein "bugchen" mit Length(AnsiChar) <> Length(WideChar) sich eingeschlichen haben.
Wie gesagt: Melde es im Forum dort oder warte bis Joachim Dürr vorbeit schaut und es mit nimmt. |
AW: Advantage Database - Null-Werte
Jo werde ich machem, danke für die Hilfe!
|
AW: Advantage Database - Null-Werte
Zitat:
|
AW: Advantage Database - Null-Werte
Hi Joachim,
danke für deine Antwort! Inwiefern meinst du das ich die Felder falsch befüllt habe? Ich habe die Felder ja garnicht befüllt, sonder den ADS den Default-Wert eintragen lassen. Ich poste hier mal das Create-Script der Test-Tabelle und den Delphi-Code mit dem ich getestet habe.
Code:
CREATE TABLE test (
test1 Char( 50 ), test2 Char( 50 ), test3 NVarChar( 50 )) IN DATABASE; EXECUTE PROCEDURE sp_ModifyTableProperty( 'test', 'Table_Auto_Create', 'False', 'APPEND_FAIL', 'testfail'); EXECUTE PROCEDURE sp_ModifyTableProperty( 'test', 'Table_Permission_Level', '2', 'APPEND_FAIL', 'testfail'); EXECUTE PROCEDURE sp_ModifyTableProperty( 'test', 'Table_Memo_Block_Size', '8', 'APPEND_FAIL', 'testfail'); EXECUTE PROCEDURE sp_ModifyTableProperty( 'test', 'Triggers_Disabled', 'False', 'APPEND_FAIL', 'testfail'); EXECUTE PROCEDURE sp_ModifyTableProperty( 'test', 'Table_Trans_Free', 'False', 'APPEND_FAIL', 'testfail'); EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'test', 'test2', 'Field_Can_Be_Null', 'False', 'APPEND_FAIL', 'testfail' ); EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'test', 'test2', 'Field_Default_Value', '''''', 'APPEND_FAIL', 'testfail' ); EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'test', 'test3', 'Field_Can_Be_Null', 'False', 'APPEND_FAIL', 'testfail' ); EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'test', 'test3', 'Field_Default_Value', '''''', 'APPEND_FAIL', 'testfail' ); Anschließend wird per Delphi ein Datensatz erzeugt in dem nur das Feld "test1" gefüllt wird:
Code:
Und nun prüfe ich die Felder "test2" und "test3" auf NULL ab - was in beiden Fällen FALSE ergeben sollte da beide Felder als NOT NULL definiert sind:
AdsTAble1.Insert;
adsTable1.FieldByName('test1').asstring := 'value'; AdsTAble1.Post;
Code:
adsTable1.FieldByName('test3').isNull; // False -> Korrekt
adsTable1.FieldByName('test3').isNull; // True -> Nicht korrekt |
AW: Advantage Database - Null-Werte
Zitat:
|
AW: Advantage Database - Null-Werte
Zitat:
Also wäre dann hier ein Fehler im DBMS vorhanden. Und wenn das Eintragen erfolgreich wäre müsste es sich doch auch in der Data Architect-Abfrage zeigen. |
AW: Advantage Database - Null-Werte
mal 'ne dumme Frage: was ist denn der Tabellentyp?
|
AW: Advantage Database - Null-Werte
Hi,
der Tabellentyp ist ADT. |
AW: Advantage Database - Null-Werte
Hi Joachim,
konntest du das Problem nachvollziehen? Danke für die Info! |
AW: Advantage Database - Null-Werte
Zitat:
Ich sträube mich dagegen, Beispiele anhand von ein paar Zeilen nachzuvollziehen, da ich mit an Sicherheit grenzender Wahrscheinlichkeit mindestens eine Eigenschaft, Codezeile o.ä. anders habe und damit solche Fehler nicht auftauchen. Das Ganze kostet unnötig Zeit und Zeit ist das kostbarste Gut, das es gibt und sollte daher nicht verschwendet werden. Aber Du kannst mir gerne ein fertiges Beispiel schicken und ich debugge es durch und bestätige entweder einen Bug oder schicke Dir eine Anleitung/Fix wie Du das Problem umgehst;) |
AW: Advantage Database - Null-Werte
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ja klar das kann ich verstehen. Ich habe mal ein Beispiel vorbereitet mit dem man das hoffentlich schnell nachstellen kann. In dem angehängten Archiv befindet sich ein SQL-Statement zum erzeugen der notwendigen Tabelle und eine kleine Delphi-Anwendung die selbsterklärend sein sollte. Die verwendeteten Komponenten sollten alle in der Default-Konfiguration sein, es wurden keine Properties verändert. Danke nochnmals für deine Hilfe! |
AW: Advantage Database - Null-Werte
Zitat:
Die NOT NULL Eigenschaft sagt nur aus, dass was drinsteht - der String selbst wird aber abgeschnitten und damit NULL für Delphi. |
AW: Advantage Database - Null-Werte
Ah ok vielen Dank für die Erklärung.
Wäre es nicht trotzdem sinnvoll wenn eine Abfrage mit IS NULL in einem SQL-Statement und die isNull-Funktion der Komponenten das selbe Ergebniss liefern? |
AW: Advantage Database - Null-Werte
Hä? Das ist aber trotzdem falsch implementiert.
Für die DB ist '' <> nil. Und das sollte es auch bei der DB-Zugriffskomponente sein. Mindestens sollte man das verhalten per Property einstellen können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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-2025 by Thomas Breitkreuz