![]() |
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 |
Re: Leerstring an Datenfeld übergeben
hast du tblXY.FieldByName('Test').Value := '\0'
oder tblXY.FieldByName('Test').Value := '\"\b' schonmal versucht? |
Re: Leerstring an Datenfeld übergeben
Zitat:
sorry für die späte Antwort. War mal eben 'ne Woche in Malaysia unterwegs :tongue:. Also: habe ich noch nicht versucht, kann ich aber noch testen. Doof wäre es aber trotzdem. Den Leerstring erhalte ich aus einem Eingabefeld. Müsste dann jedesmal die Eingabe auf Leerstring überprüfen und den String entsprechend anpassen. Vom Gefühl her steht aber in der Datenbank nacher '\0' bzw. '\"\b' drin. Warum sollte dieser Strin irgendwo angepasst werden??? Alex |
AW: Leerstring an Datenfeld übergeben
Guten Morgen.
Wir haben aktuell auch das Problem. Zitat:
Gruß Thorsten |
AW: Leerstring an Datenfeld übergeben
Hallo,
ich wurde mal IsNull:= False setzen. |
AW: Leerstring an Datenfeld übergeben
Moin...8-)
Zitat:
Delphi-Quellcode:
... ergibt einen leeren String in der DB. Nicht NULL. :wink:
tblXY.FieldByName('Test').AsString := ''
PS: Immer den exakten Datentyp übergeben. AsString, AsInteger etc. Da hängt nicht Variant dazwischen und das gecaste auf den richtigen Typ fällt weg. |
AW: Leerstring an Datenfeld übergeben
Gerade kein Delphi zur Hand aber ich meine es gibt was wie
Delphi-Quellcode:
Oder so ähnlich
FieldByName('Feldname').Clear;
|
AW: Leerstring an Datenfeld übergeben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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