![]() |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Das Integer in der DB Null sein kann ist klar, aber dazu muss dann die Schnittstelle auch Null liefern und nicht aus 'nem leeren String eine 0 machen.
Also ein Versuch: Ein Leerstring per .AsString in ein nummerisches Feld der Datenbank, führt nicht zwingend zu einem Null in der Datenbank sondern (vermutlich) eher zu einer 0. Ein Leerstring per .AsString in ein Stringfeld der Datenbank, führt nicht zwingend zu einem Null in der Datenbank sondern (vermutlich) eher zu einem Leerstring. Null bekommt man eher per .AsVariant := EmptyParam in die Datenbank, dabei sollte der Feldtyp nicht von Belang sein. So besser oder hab' ich was übersehen, unklar formuliert, ...? Bin mir da halt nicht so wirklich sicher. |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
Zitat:
![]() |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
Und da ich kein XE2 habe und auch keine Sourcen dazu, kann ich nicht im Quellcode nachschauen und mit Sicherheit sagen, wie das Verhalten dort genau sein kann, soll, darf oder muss. Bei meinem Delphi werden per ADO Integer bzw. Float per .AsString := '' zu Null, ein VarChar wird mit .AsString := '' zu einem Leerstring. Ist das so ein klar definiertes Verhalten, das bei allen Dantenbankkomponenten zu erwarten ist? Dann sollte das im Eingangspost beschriebene Problem mit der grundsätzlichen Nutzung von .AsString := Edit.Text bei Integer- bzw. Floatwerten zu lösen sein. |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
|
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
Gibts in Spring4D schon. |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Mach Dir nen eigenen Datentyp, ein record oder eine Klasse mit dem eigentlichen Wert und einem Flag "gesetzt" und die passenden Methoden dabei, u.a. ein Setter und ein "WriteToField(ds: TDataSet; const fn: string)", bei dem Du dann je nach "gesetzt" entweder den Wert übergibst oder das Feld unverändert lässt oder auch löschst.
Statt "TryStrToFloat" musst Du dann sowas wie "try StrToFloat... gesetzt := true; except .. end" nutzen. Vielleicht gleich als Methode mit in den eigenen Datentyp packen. |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
oder seh ich das falsch an Deinem Ansatz? sonst ist die Idee ja schön mit dem Record, weil man das Verhalten dann auch standardisieren kann |
AW: TryStrToFloat/TryStrToInt, leeren String nicht als 0 erhalten
Zitat:
Für alle leeren Felder schreibst Du NULL in die Tabelle. Für alle NULL Werte in der Tabelle liest Du ein leeres Feld. Bei Berechnungen in SQL kannst Du mit COALESCE() die NULL Werte in 0 wandeln, falls nötig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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