![]() |
Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE
DBCheckBox.Unchecked = NULL
Hallo zusammen,
ich habe in meiner Datenbank eine Spalte als nummerisches Feld deklariert. Entweder steht da eine 1 oder NULL drin. Wie kann ich das jetzt mit der DBCheckBox behandeln ? Bei checked gebe ich 1 ein und bei Unchecked NULL, aber trotzdem graut er mir die DBChecked - Box aus, wenn ein Wert in der DB NULL ist. Was muss ich da als Wert angeben ? Gruss Holger P.S.: Lass ich Unchecked leer, habe ich das gleiche Problem ... |
Re: DBCheckBox.Unchecked = NULL
Hallo Holger,
probiers mal mit 0. NULL ist weder 0 noch 1, oder weder true noch false. |
Re: DBCheckBox.Unchecked = NULL
Wie wärs hiermit :
Delphi-Quellcode:
if IsNull then
DBCheckbox.checked := false; |
Re: DBCheckBox.Unchecked = NULL
In welches Ereignis muss ich den Code einfügen ?
Gruss Holger P.S.: Wenn ich bei Unchecked 0 eingebe, habe ich immer ncoh das "Ausgegraut - Problem" |
Re: DBCheckBox.Unchecked = NULL
Hat keiner eine Lösung ???
Gruss Holger |
Re: DBCheckBox.Unchecked = NULL
Nimm ne normale Checkbox und überwache Änderungen am DS mit dem hansa'schen Code.
|
Re: DBCheckBox.Unchecked = NULL
Ja das wäre dann meine letzte Alternative gewesen.
Dachte nur, das ich das mit einer DBCheckbox einfacher gelöst bekomme ... Gruss Holger |
Re: DBCheckBox.Unchecked = NULL
Hallo Holger,
du möchtest ein Integer-Feld als Boolean-Feld interpretieren und dabei den Wert 1 als True interpretieren, alle anderen Werte als False. Es ist kein Problem eine entsprechende Abbildungsfunktion anzugeben:
Delphi-Quellcode:
Das eigentliche Problem besteht darin, dass die DBCheckBox nicht auf den Integer-Wert zugreift, sondern direkt auf das Feld und dadurch auch mit dem Wert Null (gleichbedeutend mit "undefined value") umgehen muss. Deshalb gibt es hier eine dreiwertige Logik und intern ist festgelegt, dass Field.IsNull den dritten Wert repräsentiert, dessen Visualisierung du beschrieben, aber falsch interpretiert hast.
function AsBoolean(f: TField): Boolean;
begin Result := f.AsInteger = 1; end; Am besten wäre es, wenn du den Definitionsbereich ändern könntest, d.h. NULL. Zuvor könntest du alle NULL-Werte durch 0 ersetzen und anschließend auch noch ein Default-Constraint einführen, damit sich keine NULL-Werte mehr einschleichen. Wenn du nur lesend zugreifst und die Tabelle auch nicht verändern darfst, dann kannst du dir auch mit einer View und der Funktion Coalesce(?) behelfen. Grüße vom marabu |
Re: DBCheckBox.Unchecked = NULL
Vielen dank,
habe mir auch schon überlegt die Felder, die Null sind mit 0 zu überbeschreiben. Ich denke ich nehme eine CheckBox, da ich eh bei Änderung an der Checkbox noch andere procduren anstossen muss. Gruss und danke Holger P.S.: Aber schade, das man Unchecked nicht als NULL definieren kann. |
Re: DBCheckBox.Unchecked = NULL
Zitat:
ich würde trotzdem die NULL Felder mit 0 überschreiben. Wenn mal ein anderer deinen Quellcode oder die Tabelle in der DB bearbeitet wüsste er sicher nicht das Du NULL als False interpretierst. Wenn ich in einem Programm solch einen Code sehe:
Delphi-Quellcode:
Würde ich Grundsätzlich davon ausgehen das in dem Feld blubb ein nicht definierter Wert steht.
begin
if blubb.IsNull then begin MachEtwas; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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