![]() |
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
Leerstring an Datenfeld übergeben
Hallo zusammen,
folgendes Problem: ich möchte einem Datenfeld einen Leerstring zuweisen. Z.B. mit "tblXY.FieldByName('Test').Value := ''". Der Typ des Datenfelds ist VARCHAR, also ein Zeichentyp. Soweit so gut. Delphi macht aus dem Leerstring aber immer automatisch NULL. Das Feld darf aber nicht NULL sein (NOT NULL). Wie kann ich dem Variant beibringen einen Leerstring nicht als NULL sonderen eben als Leerstring zu interpretieren? Das Problem tauscht komischerweise erst seit Delphi 2009 auf... Alternativen mit ".AsString" und so habe ich auch schon probiert. Gleiches Problem... Danke schonmal für eure Antworten... Alex |
Re: Leerstring an Datenfeld übergeben
Ich erinnere mich das das Speichermanagement bei dem neuen String-Typ unterschiedlich ist wenn ein leerer String vorliegt. Vermutlich liegt hier ein Bug in D2009 vor.
Kannst du ein einfaches Demoprojekt erstellen und posten? |
Re: Leerstring an Datenfeld übergeben
Hallo,
Zitat:
Was ist denn ein Leersting, doch ein String der Länge 0. Kannst Du denn per Insert einen String der Länge 0 (also ein '') in die Datenbank einfügen und hast anschließend kein NULL in der Datenbank? Erst dann kannst Du Dir Gedanken darüber machen, ob Du in Delphi ein Problem lösen musst. Wenn die Datenbank einen Leerstring als NULL interpretiert, kommst Du mit Delphimitteln nicht an dem Problem vorbei. Was Du probieren könntest: Dem Value einen String mit einem Leerzeichen zuweisen und dann speichern. Einige Datenbanken/Schnittstellen/Treiber (SQL-Server glaub' ich auch, kann aber einstellungsabhängig sein) entfernen die am Ende befindlichen Leerzeichen, so dass Du auf diese Weise einen Leerstring in die Datenbank bekommen könntest. Über das Thema "Eleganz" wollen wir uns dann bei dieser Lösung nicht unterhalten :wink: Ansonsten: Value müsste ein Variant sein, wenn ja, versuch' es mal statt mit '' mit EmptyStr. |
Re: Leerstring an Datenfeld übergeben
Zitat:
Zitat:
|
Re: Leerstring an Datenfeld übergeben
Zitat:
Zitat:
|
Re: Leerstring an Datenfeld übergeben
Hallo,
Fakt ist, dass das Ganze mit Delphi 7 noch bestens funktioniert hat. Fakt ist auch, dass es natürlich ein Unterschied ist, ob man in der Datenbank ein Feld auf NULL setzt oder es eben mit einem leeren String ('') belegt. Da es sich bei der Software um ein recht großes Programm (> 200.000 Codezeilen) handelt und ich weltweit einige Installationen laufen habe kann ich auch nicht einfach die Datenbank ändern. Evtl. handle ich mir dann neue Probleme auf Datenbankebene ein. Könnte ja da NULLs zulassen und dann in Delphi entsprechend auswerten (if Empty dann '' ...). Ist halt dann auch immer die Frage ob ich alle Stellen im Quellcode gefunden habe wo solche Probleme auftreten können... Wenn ich das Ganze mit einem normalen Variant mache funktioniert es... Werde wohl nicht drum rum kommen mal wieder die VCL im Debugger zu analysieren... Ich halte euch auf jeden Fall auf dem Laufenden, wenn ich dann weiss wo dieses Verhalten herkommt. Alex |
Re: Leerstring an Datenfeld übergeben
Wie gesagt: Irgendwo wurde im DN-Bereich von Codegear mal über die Unterschiede Philosophiert. Und dort wurde wenn ich mich recht erinnere geschrieben das eine leerer String in D2009 auch etwas von einem nil-Zeiger hat und es deshalb bei Codeportierungen Probleme an dieser Stelle geben könnte. Vermutlich ist genau dieses Problem bei ADOExpress/dbGo der Fall.
|
Re: Leerstring an Datenfeld übergeben
Probleme gibt es definitiv...
Das Feld ist ein TWideStringField. Wenn ich einen leeren Eintrag aus der Datenbank lese, dann hat Value den Wert ''. Das ist korrekt. Weise ich aber Value den String '' zu, dann hat Value sofort NULL... Alex |
Re: Leerstring an Datenfeld übergeben
Hast Du schonmal EmptyStr versucht?
|
Re: Leerstring an Datenfeld übergeben
EmptyStr ist definiert als "string = ''" (siehe SysUtils).
Was soll das bringen??? bzw. Neee, funktioniert nicht... Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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