Announcement

Collapse
No announcement yet.

NULL-Feld Problem

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

  • NULL-Feld Problem

    Hallo,
    <br>
    ich habe hier ein Feld Char1 mit Namen bHide (richtig, um einen Datensatz zu verstecken).
    <p>
    <PRE<Die Abfrage
    Select * From Address
    Where (bHide<>'1')</PRE>
    <p>
    liefert mit aber aber gar keine Datensätze zurück. Ich dachte zumindestens, dass NULL <> '1' ist ?.
    <br>
    Das explizite Eintragen von '0' geht, aber das wollte ich eigentlich nicht machen.
    <br>
    In manchen Tabellen fehlt das Feld bHide noch, das bedeutet ja dann, entwder clientseitig filtern oder nach dem Insert des Feldes alle Werte auf '0' setzen.
    <p>
    Wo liegt denn hier mein Denkfehler ?
    <p>
    Heiko

  • #2
    Hallo Heiko,<br><br>
    dein Denkfehler liegt, und man kann es nicht oft genug betonen, dass NULL kein Wert, sondern ein unbekannter Zustand ist. Du hast ja vermutlich auch schon mal versucht, Strings mit dem || Operator miteinander zu verknüpfen, und dann NULL zurückbekommen, falls eines der Argumente NULL war, oder? NULL bedeutet unbekannt, und jegliche Anwendung eines logischen Operators auf NULL ist wieder unbekannt. Ausgenommen davon ist der IS [NOT] NULL Operator, den Du in Deinem Fall verwenden mußt. Zum Beispiel:
    <pre>
    SELECT * FROM ADDRESS WHERE (BHIDE <> '1') OR (BHIDE IS NULL)
    </pre>
    Oder wenn Du obige WHERE-Klausel nicht verwendet möchtest (weil zu umständlich od. zu lang), dann definiere BHIDE als NOT NULL mit z.B. einen Default-Wert 0.<br><br>
    Schöne Grüße,<br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo Thomas,
      <br>
      das mit dem zusammenbauen von strings habe ich als alter paradoxer nie benutzt (weil ich es nicht kannte)
      <br>
      Da ich das Feld neu hinzufüge, bleibt mir ja dann nur die Möglichkeit, nach dem alter table add, die Werte explizit auf 0 zu setzen.
      <p>
      Jetzt habe ich auch die Ursache für ein Problem vor 2 Jahren ...
      <p>
      Heik

      Comment


      • #4
        Hallo Heiko,<br><br>
        schön dass man auf diese Art und Weise so schnell so alte Probleme lösen kann. ;-)<br><br>
        Das Feld auf 0 setzen, ist ja auch kein Problem:
        <pre>
        ALTER TABLE MYTABLE ADD ...;
        <br>
        COMMIT; //Wichtig!!!
        <br>
        UPDATE MYTABLE SET NEWFIELD = 0;
        <br>
        COMMIT;
        </pre>
        Übrigens, wenn Du das Feld mit einem DEFAULT Wert deklarierst, dann scheint es so, als wenn dieser Default-Wert für jeden Datensatz vergeben wird. Darauf verlassen würde ich mich allerdings nicht, weil einige ältere Meldungen in Newsgroups darauf hindeuten, dass danach ein Restore der Datenbank fehlschlug.<br><br>
        D.h., ich gehe bei so etwas immer auf Nummer sicher, und weise dem Feld durch ein explizites UPDATE Statement einen Wert zu. Das neu erzeugte NOT NULL Feld braucht aber <b>unbedingt</b> einen Wert, da es sonst beim Restore wieder kracht.
        <br><br>
        Schöne Grüße,<br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment

        Working...
        X