Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi IntegerFeld und Checkbox Wert (https://www.delphipraxis.net/117618-integerfeld-und-checkbox-wert.html)

haentschman 22. Jul 2008 08:59

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

IntegerFeld und Checkbox Wert
 
Guten Morgen alle... :-D

ich habe das Problem zwar im Griff, wüßte aber gern, warum das so ist.

- da ja Firebird Datenbanken keine Boolean Felder haben speichere ich die Werte als 0 bzw.1

soweit so gut...

wenn ich den CheckBox Wert in einer Query als Parameter übergebe
Delphi-Quellcode:
ZQueryDiv.ParamByName('Wartung').Value:= Pauschal.Checked;
...kommt in der Datenbank 0 oder 1 an. Beim Lesen wird wiederum 0 als False bzw. 1 als True interpretiert. :thumb:

aber...

wenn ich den Wert in der Query direkt verändere und dann über ApplyUpdates die Query schreiben lasse
Delphi-Quellcode:
ZQueryIP.FieldValues['CB1']:= FIPWerte.CB1.Checked;
...kommt in der Datenbank 0 und -1 an :gruebel: wobei beim Lesen die 0 als False und die -1 als True interpretiert wird.
:wiejetzt:

- wenn ich nicht in der Tabelle der Datenbank nachgesehen hätte, wäre es mir gar nicht aufgefallen.

hat jemand eine Idee, warum das so ist ?

PS: ich habe das im Moment so gelöst, daß ich den Status der CheckBox auswerte und explizit 0 oder 1 schreibe.

Danke... :hi:

user0815 22. Jul 2008 09:19

Re: IntegerFeld und Checkbox Wert
 
Hi, wenn ich einen CheckBox Wert speicher dann nehme ich BoolToStr.
Hat es evtl. damit etwas zu tun ?

RavenIV 22. Jul 2008 09:31

Re: IntegerFeld und Checkbox Wert
 
Firebird hat zwar kein Boolean, Du kannst Dir aber eine neue Domain (=Datentyp) erstellen und diese verwenden.
z.B.
Code:
CREATE DOMAIN D_BOOLEAN AS
  SMALLINT
  DEFAULT 0;
Kannst Du nicht das .Checked zu einem Integer umwandeln und dann speichern?

haentschman 22. Jul 2008 09:34

Re: IntegerFeld und Checkbox Wert
 
Danke für deine Antwort...

- das hat nicht wirklich damit zu tun. Boolean sollte man als Integer speichern (gibt es eine Menge Threads dazu)
- Integer 0 = False, Integer 1 = True
- String "False" und "True" ist eigentlich gar nichts :roll:

PS: ich hatte das früher auch mit String :oops: aber mit Integer ist wesentlich komfortabler und übersichtlicher

@RavenIV
Zitat:

Kannst Du nicht das .Checked zu einem Integer umwandeln und dann speichern?
...
Zitat:

PS: ich habe das im Moment so gelöst, daß ich den Status der CheckBox auswerte und explizit 0 oder 1 schreibe.
Zitat:

Du kannst Dir aber eine neue Domain (=Datentyp) erstellen und diese verwenden.
... auch ne Variante, welche sich auszuprobieren lohnt.

Danke an alle...

RavenIV 22. Jul 2008 09:40

Re: IntegerFeld und Checkbox Wert
 
Zitat:

Zitat von haentschman
@RavenIV
Zitat:

Kannst Du nicht das .Checked zu einem Integer umwandeln und dann speichern?
...
Zitat:

PS: ich habe das im Moment so gelöst, daß ich den Status der CheckBox auswerte und explizit 0 oder 1 schreibe.

Machst Du es auch so?:
ZQueryIP.FieldValues['CB1']:= Integer(FIPWerte.CB1.Checked);

haentschman 22. Jul 2008 09:45

Re: IntegerFeld und Checkbox Wert
 
Zitat:

Machst Du es auch so?:
...nicht wirklich. Ich bevorzuge die umständliche Variante :oops:

Delphi-Quellcode:
if FIPWerte.CB1.Checked then ZQueryIP.FieldValues['CB1']:= 1;
Delphi-Quellcode:
ZQueryIP.FieldValues['CB1']:= Integer(FIPWerte.CB1.Checked);
... let´s have a Test :wink:

bis bald...

haentschman 22. Jul 2008 09:53

Re: IntegerFeld und Checkbox Wert
 
Zitat:

ZQueryIP.FieldValues['CB1']:= Integer(FIPWerte.CB1.Checked);
...und es bewegt sich doch ... wie es soll :thumb:
...das Leben kann so einfach sein ! :-D

Danke... :hi:


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

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf