![]() |
Datenbank: MSSQL • Zugriff über: ADO
Kann Memofeld keinen leeren String zuweisen
Moin!
Ich habe ein ADOTable, ein Datasource und ein DBMemo. Mein Problem ist nun folgendes: Ich kann jeden beliebigen Wert in das Memo schreiben und er wird auch in der DB gespeichert. Wenn ich aber versuche das Memo komplett zu leeren, wird beim Posten stattdessen der alte Text wieder eingesetzt/beibehalten. Ich habe auch schon versucht, dem Datenbankfeld direkt einen leeren String zuzuweisen (á la ADOTable1.fieldByName('bla').asString := ''). Dies wird ebenfalls nicht angenommen. Ich habe mit einem MSSQL-Server, sowie mit einer MSACCESS-db probiert. Kennt jemand dieses Problem? Im Netz habe nichts gefunden. |
Re: Kann Memofeld keinen leeren String zuweisen
Ich kenne mich mit dem MSSQL Server nicht aus, aber vielleicht
musst du anstatt einen Leer-String dem Feld "NULL" zuweisen.
SQL-Code:
UPDATE table SET Feld=NULL WHERE ID=5;
|
Re: Kann Memofeld keinen leeren String zuweisen
Hallo iGoa,
Meine Erfahrungen mit dem SQLServer liegen etwas weit zurück aber soweit ich mich erinnern kann sollte ein Leerzeichen funktionieren. Gruß K-H |
Re: Kann Memofeld keinen leeren String zuweisen
Ein Leerstring sollte eigentlich auch funktionieren IIRC. Allerdings darf das Feld dazu nicht als NOT NULL definiert sein.
|
Re: Kann Memofeld keinen leeren String zuweisen
Danke schonmal für die Antworten.
Das Problem tritt nicht nur beim SQLServer auf, sondern auch mit ner ACCESS-mdb. Das Feld kann den Wert NULL haben. Mit SQL könnte ich den Wert bestimmt auf NULL oder auf einen leeren String setzen, aber dann breche ich ja komplett mit dem Konzept, ein Datasource, Table und datensensitive Steuerelemente zu benutzen. Dann müsste ich bei jedem Datensatzwechsel irgendwelche Standard-Memos manuell füllen und beim Posten manuell in die DB schreiben per SQL. Das kann doch nicht der Sinn der Sache sein. |
Re: Kann Memofeld keinen leeren String zuweisen
Schon mal folgendes versucht?
Delphi-Quellcode:
Grüße
ADOTable1.fieldByName('bla').assign(nil);
Mikhal |
Re: Kann Memofeld keinen leeren String zuweisen
Wenn alle Stricke reißen, dann löscht die Methode TField.Clear() zuverlässig jedes Datenbankfeld, solange NULL-Werte zulässig sind.
Grüße vom marabu |
Re: Kann Memofeld keinen leeren String zuweisen
[OT]Welcome back Achim :) [/OT]
|
Re: Kann Memofeld keinen leeren String zuweisen
scheint ja eine verkorkste ADO-Version zu sein. Versuche doch mal ein " " Leerzeichen zuzuweisen... // Martin
|
Re: Kann Memofeld keinen leeren String zuweisen
Leerzeichen klappt wie jeder andere Wert. Nur nicht nichts.
Mit dem Assign(nil) bzw. clear könnte klappen, aber das Problem ist dann, zu welchem Zeitpunkt ich das aufrufen soll. Es ist nämlich wirklich so, dass eine Zuweisung von '' oder null gar nicht erst das Feld erreicht. Wenn ich zum Beispiel folgendes tue:
Delphi-Quellcode:
Dann erscheint in der Meldung schon wieder der alte Wert!
tableAmbientMedia.fieldByName('MEINMEMOFELD').asString := '';
showMessage( tableAmbientMedia.fieldByName('MEINMEMOFELD').asString); |
Re: Kann Memofeld keinen leeren String zuweisen
Zitat:
EDIT: Mit assign(nil) und clear funktioniert es auch nicht! |
Re: Kann Memofeld keinen leeren String zuweisen
Bist Du Dir ganz sicher, dass NULL zulässig ist? Schau lieber noch einmal nach.
|
Re: Kann Memofeld keinen leeren String zuweisen
Ganz sicher! Ich kann es zum Beispiel per SQL reinschreiben. Das mach ich jetzt als Notlösung. Der User (es ist zum Glück erstmal nur einer) muss zum Leeren des Feld ein oder mehrere Leerzeichen reinschreiben. Dann mach ich OnAfterPost noch ein SQL-Update und setze das Feld auf NULL. Ziemlich bekloppt, aber das einzige, was ich jetzt machen kann.
|
Re: Kann Memofeld keinen leeren String zuweisen
Das hab ich ja noch nie gehört, aber wenn es so funktioniert :gruebel:
|
Re: Kann Memofeld keinen leeren String zuweisen
Hallo,
das Problem kommt mir bekannt vor, auch wenn's schon ein paar Jährchen her ist. Damals hat mich eine Access-DB wahnsinnig gemacht. Die Lösung war dann:
Delphi-Quellcode:
Will heißen: Der Wert einer leeren Variabel war nicht zuzuweisen, aber diese gefolgt von einem Leerzeichen funktionierte:
ADOQuery.ParamByName('Spalte').Value := leerevariabel + ' ';
Aber: In der Datenbank war dann kein Leerzeichen, sondern die Spalte wurde auf Null gesetzt. Daher dürfte der Vorschlag, der weiter oben mit dem Leerzeichen gemacht wurde, zu einer korrekten Lösung führen. Je nach Einstellung schneiden MS-SQL-Server und Access einer Zeichenfolge folgende Leerzeichen ab. Dies führt hier zu dem gewünschten Ergebnis. Es wäre also einen Versuch Wert: Vor dem Post (OnBeforePost) dem DBMemo.Text noch ein Leerzeichen hinzufügen (wenn es leer ist), damit auch in einem leeren DBMemo etwas drinne ist. Das Leerzeichen wird von der Datenbank entfernt. Zugegeben: Ist gewöhnungsbedürftig. |
Re: Kann Memofeld keinen leeren String zuweisen
Danke für die Tipps.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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