Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBCheckBox.Unchecked = NULL (https://www.delphipraxis.net/96131-dbcheckbox-unchecked-%3D-null.html)

HolgerCW 19. Jul 2007 08:54

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 ...

pmoegenb 19. Jul 2007 09:07

Re: DBCheckBox.Unchecked = NULL
 
Hallo Holger,

probiers mal mit 0. NULL ist weder 0 noch 1, oder weder true noch false.

Hansa 19. Jul 2007 09:07

Re: DBCheckBox.Unchecked = NULL
 
Wie wärs hiermit :

Delphi-Quellcode:
if IsNull then
  DBCheckbox.checked := false;

HolgerCW 19. Jul 2007 10:19

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"

HolgerCW 19. Jul 2007 11:21

Re: DBCheckBox.Unchecked = NULL
 
Hat keiner eine Lösung ???

Gruss

Holger

mkinzler 19. Jul 2007 11:25

Re: DBCheckBox.Unchecked = NULL
 
Nimm ne normale Checkbox und überwache Änderungen am DS mit dem hansa'schen Code.

HolgerCW 19. Jul 2007 11:50

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

marabu 19. Jul 2007 11:53

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:
function AsBoolean(f: TField): Boolean;
begin
  Result := f.AsInteger = 1;
end;
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.

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

HolgerCW 19. Jul 2007 12:01

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.

Sharky 20. Jul 2007 06:36

Re: DBCheckBox.Unchecked = NULL
 
Zitat:

Zitat von HolgerCW
...P.S.: Aber schade, das man Unchecked nicht als NULL definieren kann.

Hai HolgerCW,

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:
begin
  if blubb.IsNull then
  begin
    MachEtwas;
  end;
end;
Würde ich Grundsätzlich davon ausgehen das in dem Feld blubb ein nicht definierter Wert steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

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