AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Advantage Database - Null-Werte
Thema durchsuchen
Ansicht
Themen-Optionen

Advantage Database - Null-Werte

Ein Thema von bwolf · begonnen am 19. Okt 2011 · letzter Beitrag vom 2. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Advantage Database - Null-Werte

  Alt 19. Okt 2011, 17:14
Datenbank: ads • Version: 10 • Zugriff über: TDatasetDescendant
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Advantage Database - Null-Werte

  Alt 19. Okt 2011, 17:18
da haben wohl die ADS-Kompos nen kleinen Bug.
Poste das doch mal in deren Forum.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Advantage Database - Null-Werte

  Alt 19. Okt 2011, 17:18
Dann hat u definiert, dass '' delphiseitig als Null zu betrachten ist.
Markus Kinzler
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Advantage Database - Null-Werte

  Alt 19. Okt 2011, 17:39
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 :/
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Advantage Database - Null-Werte

  Alt 19. Okt 2011, 17:44
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Advantage Database - Null-Werte

  Alt 19. Okt 2011, 18:27
Jo werde ich machem, danke für die Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#7

AW: Advantage Database - Null-Werte

  Alt 20. Okt 2011, 09:48
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!
Setze mal AdsTable.AdsTableOptions.AdsPreserveSpaces auf TRUE. Ich nehme an, du hast das Feld einfach falsch befüllt
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Advantage Database - Null-Werte

  Alt 20. Okt 2011, 12:04
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:
  AdsTAble1.Insert;
  adsTable1.FieldByName('test1').asstring := 'value';
  AdsTAble1.Post;
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:

Code:
  adsTable1.FieldByName('test3').isNull; // False -> Korrekt
  adsTable1.FieldByName('test3').isNull; // True -> Nicht korrekt
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#9

AW: Advantage Database - Null-Werte

  Alt 20. Okt 2011, 12:54
Anschließend wird per Delphi ein Datensatz erzeugt in dem nur das Feld "test1" gefüllt wird:
Code:
  AdsTAble1.Insert;
  adsTable1.FieldByName('test1').asstring := 'value';
  AdsTAble1.Post;
...und wenn die Option nicht gesetzt ist, wird genau hier jeder Leerstring in NULL umgewandelt.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Advantage Database - Null-Werte

  Alt 20. Okt 2011, 13:32
...und wenn die Option nicht gesetzt ist, wird genau hier jeder Leerstring in NULL umgewandelt.
Und spätestens hier sollte es krachen wenn für das Feld "NOT NULL" definiert ist.
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:06 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