Seite 1 von 3

(gelöst) Abfrage von Wahrheitswerten

Verfasst: Fr 19. Dez 2014, 17:53
von Freischreiber
Hallo allerseits,

ich habe eine Aufgabentabelle erstellt, mit Spalte1 = "Aufgabentext" als Textvarchar, Spalte2 "Datum" als Datumsfeld und Spalte3 = "Erledigt?" als Wahrheitswert ja/nein mit Defaultwert Nein.

Dabei habe ich gleich mehrere Probleme:

- Warum weigert sich LO, das Feld mit dem Wahrheitswert auf "Eingabe erforderlich" zu setzen? Einen von beiden Zuständen muß die Aufgabe ja haben.

- Warum stellt LO beim Öffnen der Tabelle Aufgaben, bei denen die Erledigung "falsch" sein soll, zwar mit einem leeren Kästchen dar, das aber blau hinterlegt ist? Ist das ein anderer Zustand als ein weißes leeres Kästchen? Ja/Nein/blau??

- Wie gestaltet man eine Abfrage, die nur noch nicht erledigte Aufgaben bis heute anzeigen soll?
Mein Versuch

Code: Alles auswählen

SELECT * FROM "aufgaben" WHERE "Datum" <= CURRENT_DATE AND "Erledigt" = FALSE
liefert null Treffer.

Unscharf grübelnd zwischen 0 und 1
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: Fr 19. Dez 2014, 19:25
von RobertG
Hallo Freischreiber,

das Feld hat insgesamt 3 Einstellungen: NULL, False (0) und True (1).

Code: Alles auswählen

SELECT * FROM "aufgaben" WHERE "Datum" <= CURRENT_DATE AND NOT "Erledigt" = True
dürfte vielleicht zum Ziel führen.

Wo versuchst Du "Eingabe erforderlich" zu wählen? Während der Erstellung einer Tabelle oder nachdem bereits Daten in der Tabelle sind? "Eingabe erforderlich" bedeutet dann, dass das Feld nie NULL sein darf.

Gruß

Robert

Re: Abfrage von Wahrheitswerten

Verfasst: Sa 20. Dez 2014, 08:33
von Freischreiber
Hallo Robert,

und blau bedeutet vermutlich Null, oder?

Ja, ich habe es bei einer Tabelle mit sehr vielen Einträgen versucht, darunter viele blaue...

Es ist aber auch bei der Bedienung hinderlich: man muß zweimal klicken, um von WAHR auf FALSCH zu wechseln. Kann man diese Möglichkeit, daß das Feld Null werden kann, nicht sperren?

Wenn man jetzt alle blauen Einträge auf FALSE setzen will in einer bestehenden Tabelle, gibt es dafür einen einfachen Weg?

Gruß
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: Sa 20. Dez 2014, 08:59
von Freischreiber
Ah, jetzt! Was ich wollte, aber nicht konnte, ist die Lösung:
"Eingabe erforderlich" erlaubt dem Feld nur noch zwei Zustände, true und false.

Und vorher alle Nullwerte in false zu wandeln, geht wohl automatisch mit diesem Befehl?

Code: Alles auswählen

UPDATE "Table" SET "bool_field"=False WHERE "bool_field" Is Null
Hab ich hier: https://forum.openoffice.org/en/forum/v ... =42&t=5251
abgeschrieben... kann man den Befehl bedenkenlos anwenden?

Gruß
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: Sa 20. Dez 2014, 10:12
von RobertG
Hallo Freischreiber,

genau so funktioniert es. Erst alle Felder, die NULL sind, mit False belegen und dann anschließend das Feld auf "Eingabe erforderlich" setzen. Vielleicht definierst Du auch noch den Dafault-Wert als False:

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" SET DEFAULT False;
Dann wird, auch wenn nichts eingegeben wird, automatisch von der Datenbank 'False' eingesetzt.

Gruß

Robert

Re: Abfrage von Wahrheitswerten

Verfasst: Sa 20. Dez 2014, 15:25
von Freischreiber
Hallo Robert,

danke!

Aber diese Funktion, gleichberechtigt zwischen wahr, falsch und null umschalten zu können, ist doch wirklich seltsam, oder? Bei anderen Feldtypen gibt es auch keine Möglichkeit, Nullwerte anzuzeigen oder per Maus zu setzen...

Gruß
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: Sa 20. Dez 2014, 17:41
von RobertG
Hallo Freischreiber,

auch in anderen Feldern gibt es die NULL-Werte. Du kannst z.B. bei Formularen in den Feldern angeben, dass eine leere Zeichenfolge NULL sein soll. Das ist die Standardeinstellungen in den Eigenschaften → Daten aller Formularfelder.

Dass das bei Ja/Nein-Feldern irgendwie noch gesondert angezeigt wird ist eben dem Verhalten geschuldet, dass sonst untergeht, dass es den Unterschied zwischen einem leeren Feld und einem Feld gibt, das NULL ist. Lediglich bei Zahlenfeldern ist das deutlich erkennbar. Steht keine Zahl drin, so ist das Feld NULL.

Das Ganze ist nicht eine spezifische Eigenschaft von Base sondern die Eigenschaft aller Datenbanken bei der Behandlung von boolschen Feldern: Boolsche Felder können NULL, False(0) oder True(1) sein - haben also immer 3 Einstellungen. Das ist wie bei Abstimmungen: Enthaltung, Nein und Ja. Und für das "Nein" musst Du auch erst einmal die Hand heben. Das ist eine Entscheidung, die die Datenbank nicht selbst treffen kann. Du kannst die Vorentscheidung treffen, indem Du sagst: Wenn jemand sich enthält, dann speichere das automatisch bei Neueingaben als "Nein" ab. Das ist dann der Default-Wert.

Gruß

Robert

Re: Abfrage von Wahrheitswerten

Verfasst: So 21. Dez 2014, 15:03
von Freischreiber
Hallo Robert,

ich lehne das ab. Das ist mir für ein binäres Feld einfach zuviel :mrgreen:

Gruß
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: So 21. Dez 2014, 15:15
von Freischreiber
Hallo,

zu der Einstellung "Eingabe erforderlich" habe ich noch eine Frage:

Ich möchte die Einstellung für eine Tabellenspalte der Buchungstabelle vergeben, und zwar für die AuftragsID (Fremdschlüssel zur Auftragstabelle). Base weigert sich aber, obwohl definitiv alle Einträge der Spalte mit AuftragsIDs gefüllt sind, keiner ist Null.

Die Fehlermeldung heißt:
SQL-Status: 23000
Fehler-Code: -197
Column is referenced in constraint or view: SYS_FK_1015 in statement

Heißt das, ich muß (und kann?) die Beziehung löschen, das Feld auf erforderlich setzen und die Beziehung wieder herstellen?

Gruß
Freischreiber

Re: Abfrage von Wahrheitswerten

Verfasst: So 21. Dez 2014, 16:01
von RobertG
Hallo Freischreiber,

die Beziehungsdefinition ist bereits ein Eingriff in die Tabellenstruktur. Da durch die Beziehungsdefinition bereits auf ein Feld zugegriffen wird kann es nicht anschließend noch verändert werden. Du müsstest also die Verbindung lösen, eine Veränderung vornehmen und anschließend wieder die Verbindung durchführen.

Gruß

Robert