Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Ich schaue gerade Firebird 1.5 an. Ich habe keine schlüssige Antwort gefunden, ob sie den Datentyp "boolean" kennt oder nicht. Oder heist er etwa anders?
den Datentyp Boolean gibt es so direkt nicht. Man kann dies über eine Domain lösen. Die Domain ist vom Typ char(5) und erlaubt nur die Inhalte "TRUE" und "FALSE".
Naja, eine Bool-Domäne vom Typ CHAR(5) erlaubt allerdings auch Werte wie "Evtl.", "OUPS!", "A GEH" "OKAY", etc.
:-)
Bool Domänen sind für gewöhnlich vom Typ CHAR(1) oder INTEGER / SMALLINT.
CREATE DOMAIN T_BOOL_NO AS CHAR(1)
DEFAULT '0' NOT NULL
CHECK (value in ('0','1'));
oder
CREATE DOMAIN T_BOOL_NO AS SMALLINT
DEFAULT '0' NOT NULL
CHECK (value in (0,1));
Ich bevorzuge CHAR mit 0 und 1 (kann natürlich auch T/F oder W/F sein), weil alles, was irgendwoher gelesen wird (zB auch aus dateien) als String daherkommt und ich nicht erst ein CAST o.ä. machen muss.
Aber das bleibt eh jedem selbst überlassen.
Herzlichen Dank für eure Tipps. So wie ich es sehe lohnt es nicht von Interbas 6.5 auf Firebird 1.5 um zusteigen. Dies war ursprünglich meine Frage.
Also was Boolean anget bevorzuge ich die Wariante mit smallint.
wenn ich die Values TRUE und FALSE vorgebe, so
sind die anderen Eingaben nicht möglich.
Vorteil ist dann in Delphi diese Felder direkt
als Boolean abzufragen. Das geht mit 0,1 nicht.
Klar kannst Du TRUE und FALSE vorgeben, wie ich dies in meinem Beispiel mit 0 und 1 gemacht habe.
Dennoch speicherst Du 5 Zeichen, wo eines reicht.
Wie weist Du Delphi an den ausgelesen String "TRUE" oder "FALSE" direkt als Boolean auszuwerten? (zumindest in welcher Weise, die 0 und 1 nicht auch zuliessen?)
Desweiteren hat 0/1 den Vorteil, dass es sowohl als String als auch als Integer direkt in der DB ausgewertet werden kann (da IB/FB bei abfragen automatisch einen Typecast vornimmt).
Aber verstehe mich nicht falsch: Du darfst gerne TRUE/FALSE verwenden.
Ja, aber asBoolean gibt TRUE zurück, für alles was mit den Buchstaben Y, y, T oder t (für Yes oder True) beginnt, andernfalls False (laut Delphi-Hilfe).
Und:
Das funktioniert auch nicht mit allen Zugriffskomponenten; wenn Du mal wechseln solltest, bist Du froh, wenn Du das Handling schon selber umgestellt hast und generell AsString in ein Boolean umwandeln kannst.
Comment