Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite will mit SELECT ... WHERE fieldxx = 0 Werte nicht anzeigen. (https://www.delphipraxis.net/211425-sqlite-will-mit-select-where-fieldxx-%3D-0-werte-nicht-anzeigen.html)

himitsu 14. Sep 2022 21:46

AW: SQLite will mit SELECT ... WHERE fieldxx = 0 Werte nicht anzeigen.
 
LIKE, ILIKE, ~ und Co. sind natürlich für Texte gedacht. Zahlen vergleicht man damit eigentlich nicht.

Hier gibt es ein INTeger-Feld, in dem aber Text drin steht, daher das Problem.

SQLite <> MySQL/MariaDB



Du könntest ein SELECT schreiben, was prüft, ob in dem Feld ein Integer steht und wenn NOT, dann da eine 0 reinschreiben.
https://stackoverflow.com/questions/...mber-in-sqlite

hewy 16. Sep 2022 14:12

AW: SQLite will mit SELECT ... WHERE fieldxx = 0 Werte nicht anzeigen.
 
So problem gelöst.
Damit mir da nicht wieder passiert habe ich dem genannten Feld eine default Wert gegeben damit wird es zu minderst bei neuen Datensätze immer ein korrekte 0 geben.
Be i bereits bestehenden Datensätze hatte ich glück das das Zeit Feld gleich daneben immer null ist wenn die Source_Id 0 sein sollte. Daher lässt sich das ins nächste update für den Anwender einbinden.
Danke an eure Hilfe ohne hätte ich noch ne Weile herumgeübt.

himitsu dein Vorschlag wäre sogar noch etwas besser. Danke

himitsu 16. Sep 2022 14:34

AW: SQLite will mit SELECT ... WHERE fieldxx = 0 Werte nicht anzeigen.
 
Das stimmt aber nicht.

Es würde bloß eine 0 reinschreiben, wenn es NULL bleibt, also garnichts zugewiesen wird.
Das DEFAULT wird nur genommen, wenn das Feld im INSERT garnicht enthalten ist, bzw. wenn es explizit als DEFAULT markiert wurde.

Hier wurde aber "etwas" zugewiesen. :zwinker:



Wenn das DBMS es nicht selbst kann, dann könnte man vielleicht mit einem Trigger oder CONTAINS CHECK auf sowas wie IS INT versuchen zu verhindern, dass etwas Falsches rein kommt.


Oder im SELECT bzw. VIEW, wo du dieses Feld explizit nach INT castest, bevor es benutzt wird.
Aber natürlich besser schon vorher dafür zu sorgen, dass garnicht erst was Ungültiges rein kommt, bzw. nach dem INSERT nochmal den Inhalt gegenzuprüfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Seite 2 von 2     12   

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