Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Boolean -> String und zurück (https://www.delphipraxis.net/105511-boolean-string-und-zurueck.html)

haentschman 23. Dez 2007 11:18

Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos

Boolean -> String und zurück
 
Guten Morgen an alle... :-D

das Problemchen läuft wieder einmal unter :wiejetzt:


...wie Euch bekannt ist hat ja Firebird keine Boolean Felder.
... darum habe ich mich entschieden dafür varchar zu benutzen und 'True' / 'False' einzutragen... gefällt mir besser als 0 / 1 :-D

...testweise 'True' in die Datenbank eingetragen und mit z.B.
Delphi-Quellcode:
CheckBoxSteuerung.Checked:= ZQueryAnlagenDetail.FieldByName('STEUERUNG').asBoolean;
eingelesen ---> Checkbox wird gesetzt. :thumb:

ok... dann eintragen mit
Delphi-Quellcode:
ZQueryAnlagenDetail.ParamByName('Steuerung').asBoolean:= CheckBoxElektro.Checked;

... in der Datenbank kommt aber 0 bzw 1 an und einlesen mit 0 oder 1 mag er nicht CheckBox ist in jedem Fall nicht gesetzt. :(

muß ich wirklich mit if ...Checked then 'True' eintragen ?

grenzgaenger 23. Dez 2007 11:39

Re: Boolean -> String und zurück
 
die interne representation von boolschen werten ist eigentlich immer das selbe (pascal/C/C++) 0 = false; <> 0 = true. daher solltest du am besten auch die boolschen werte so in die datenbank ablegen. als integer mit 0 = false und true = 1 oder 0xff. die zuweisung kannst dann konsistent über false machen if ... oder if not ... damit sollte das problemlos gehen.

überdenke doch bitte aktuell dein DB design... es wird dir mittelfristig mehr probleme bereiten, als lösen...

noch schöne weihnachten.

nachtrag:
  • dein ansatz über string constanten ist nicht sonderlich performant...
  • kannst du ggf. die klasse variants noch entsprechend erweitern

haentschman 23. Dez 2007 11:44

Re: Boolean -> String und zurück
 
ok...

das ändern in Integer und 0/1 ist problemlos möglich...

bevor ich jetzt den Gang nach Canossa antrete lieber noch mal nachgefragt...

wenn dann in einem Integer Feld eine 1 steht würde dann mit
Delphi-Quellcode:
CheckBoxGerate.Checked:= ZQueryAnlagenDetail.FieldByName('GERATE').asBoolean;
die CheckBox gesetzt ? oder trotzdem if then ...

[edit]
Zitat:

die zuweisung kannst dann konsistent über false machen
..ist ja eigentlich die Antwort
[/edit]

grenzgaenger 23. Dez 2007 11:54

Re: Boolean -> String und zurück
 
mach dir doch 'n kleines testprogramm und seh es dir mal an (z.b. im debugger). dann weisst du es gewiss. ich hab im übrigen kein zeos... sollt aber kein problem darstellen. hier mal 'n kleines testprogy

Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils, variants;

var
 b: boolean;
 v: variant;
 i: integer;
begin
 b := true;
 v := b; i := v; writeln(v, ', ', b, ', ', i);
 b := v; i := v; writeln(v, ', ', b, ', ', i);
 v := 1; v := i; writeln(v, ', ', b, ', ', i);
 b := v; i := v; writeln(v, ', ', b, ', ', i);
 v := 0; i := v; writeln(v, ', ', b, ', ', i);
 b := v; i := v; writeln(v, ', ', b, ', ', i);
 readln;
end.
Edit: Testprogramm mit Integer erweitert

haentschman 23. Dez 2007 12:00

Re: Boolean -> String und zurück
 
Vielen Dank...probiere es mal durch... :-D

Frohe und ruhige Weihnachten.... :hi:

quendolineDD 23. Dez 2007 13:09

Re: Boolean -> String und zurück
 
Integer sind unter anderem besser zu vergleichen as Strings :)

haentschman 23. Dez 2007 14:38

Re: Boolean -> String und zurück
 
...Update für alle mit gleichem Denkfehler... :-D


...so funktionierts:

1. Tabellenfeld als Integer definieren
2. CheckBox speichern... SQL Parameter
Delphi-Quellcode:
Query.ParamByName('XXXX').Value:= CheckBox.Checked;
3. CheckBox einlesen...
Delphi-Quellcode:
CheckBox.Checked:= Query.FieldByName('XXXX').Value;
4. Bei Verwendung von DBCheckBox ValueChecked = 1 , ValueUnchecked = 0

...vieleicht hilfts jemanden.

Frohe Weihnachten.... :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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