Announcement

Collapse
No announcement yet.

Firebird und Datentyp boolean

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Firebird und Datentyp boolean

    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?

    Gruss Renato

  • #2
    Hallo Renato,

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

    Gruß

    Andrea

    Comment


    • #3
      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.

      Luc

      Comment


      • #4
        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.

        Gruss Renat

        Comment


        • #5
          Hi Lucas,

          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.

          Gruß

          Andrea

          Comment


          • #6
            Andreas,

            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.

            Luc

            Comment


            • #7
              Hi Luc,

              ich Frage direkt ab .
              IF Query1.FieldByName('Sicher').asBoolean Then
              .
              .
              .
              Aus Datenbanksicht geb ich Dir na klar Recht!

              Gruß

              Andrea

              Comment


              • #8
                Andreas,

                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.

                Luc

                Comment

                Working...
                X