Access-Zustände einer Checkbox
small-step
- datenbank
0 fk0 Axel Richter
Hallo alle,
folgendes Problem:
Ich lese aus einer Tabelle Daten aus und füge, wo vorhanden, mit LEFT JOIN noch die Werte einer Checkbox an. Der Abfrageeditor von Access scheint die Zustände Wahr, Falsch und nicht Definiert zu kennen. Gibt es eine Möglichkeit an diesen dritten Zustand zu kommen?
Danke schonmal für die Hilfe.
Gruß,
small-step
eigentlich sollte eine checkbox nur die werte ja/nein oder true/false kennen. (angekreuzt oder nich).
der dritte zustand könnte 'vielleicht' sein.
aber im ernst: der dritte zustand ist möglicherweise 'unbekannt'.
dies kann dadurch passieren, daß du der spalte im tabellenentwurfsformular das atrribut 'eingabe erforderlich' auf nein gesetzt hast. dann müßte access hier NULL zurückgeben.
Hallo fk,
aber im ernst: der dritte zustand ist möglicherweise 'unbekannt'.
dies kann dadurch passieren, daß du der spalte im tabellenentwurfsformular das atrribut 'eingabe erforderlich' auf nein gesetzt hast. dann müßte access hier NULL zurückgeben
Ich habe versucht es mit IsNull() abzufragen. Leider hat es nicht geklappt. Gibt es eventuell die Möglichkeit, direkt in der SQL Abfrage einen alternativen Wert z.B. über IIF anzugeben? Also sollte das LEFT JOIN keinen Wert zurückgeben können, da kein Eintrag vorhanden ist einen vordefinierten Wert ausgeben. Gibt's da ne Möglichkeit?
Gruß,
small-step
yo,
Gibt es eventuell die Möglichkeit, direkt in der SQL Abfrage einen alternativen Wert z.B. über IIF anzugeben? Also sollte das LEFT JOIN keinen Wert zurückgeben können, da kein Eintrag vorhanden ist einen vordefinierten Wert ausgeben. Gibt's da ne Möglichkeit?
ja, das ist möglich. wie genau die funktion heißt, kommt ganz auf das dbms system an. wenn du acces benutzt, einfach mal dort in der hilfe nach der entsprechenden funktion nachschauen.
Ilja
tschuldigung, den left-join habe ich einfach überlesen.
hatte mich gleich auf den 3. zustand konzentriert.
bei einem inner-join gilt mein statement jedoch.
wie die anderen bereits sagten, durch den left-join wird die linke tabelle komplett gelesen. wenn es nun keine sätze in der anderen tabelle gibt, wird hier ein NULL generiert. das wäre dann der 3. zustand.
um dies abzufangen, kannst du in der on bedingung einen IF oder CASE einbauen, und bei NULL einen ja/nein einsetzen.
Hallo,
folgendes Problem:
Ich lese aus einer Tabelle Daten aus und füge, wo vorhanden, mit LEFT JOIN noch die Werte einer Checkbox an. Der Abfrageeditor von Access scheint die Zustände Wahr, Falsch und nicht Definiert zu kennen. Gibt es eine Möglichkeit an diesen dritten Zustand zu kommen?
Wenn zwei Tabellen mit LEFT JOIN verbunden sind, dann ergibt sich eine Datensatzmenge, die _alle_ Datensätze der LEFT-Tabelle, verbunden mit den Datensätzen der RIGHT-Tabelle enthält, für welche die JOIN-Bedingung zutrifft. In Datensätzen, bei denen es keine Entsprechungen in der RIGHT-Tabelle gibt, sind die Werte der Felder aus der RIGHT-Tabelle NULL. Das ist immer so, nicht nur bei Ja/Nein-Feldern.
Bsp.:
Tabelle1
id
1
2
3
4
5
Tabelle2
id check
1 Ja
2 Nein
3 Nein
SELECT Tabelle1.id, Tabelle2.check, [check] Is Null AS ist_check_NULL, IIf([check],1,0) AS check_wert
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id;
ergibt:
id check ist_check_NULL check_wert
1 Ja 0 1
2 Nein 0 0
3 Nein 0 0
4 -1 0
5 -1 0
viele Grüße
Axel
Hallo Axel Richter,
Wenn zwei Tabellen mit LEFT JOIN verbunden sind, dann ergibt sich eine Datensatzmenge, die _alle_ Datensätze der LEFT-Tabelle, verbunden mit den Datensätzen der RIGHT-Tabelle enthält, für welche die JOIN-Bedingung zutrifft. In Datensätzen, bei denen es keine Entsprechungen in der RIGHT-Tabelle gibt, sind die Werte der Felder aus der RIGHT-Tabelle NULL. Das ist immer so, nicht nur bei Ja/Nein-Feldern.
SELECT Tabelle1.id, Tabelle2.check, [check] Is Null AS ist_check_NULL, IIf([check],1,0) AS check_wert
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id;
Also Verstanden habe ich es noch nicht so ganz. Leider fehlt mir gerade die Zeit es zu probieren und mich dahinter zu klemmen, aber morgen schau ich es mir nochmal an. Dankeschön auf jeden Fall für die Mühe!
Gruß,
small-step
Hallo Axel Richter,
SELECT Tabelle1.id, Tabelle2.check, [check] Is Null AS ist_check_NULL, IIf([check],1,0) AS check_wert
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id;
Da ich den Zustand "Undefiniert" ja auch benötige, habe ich das ganze folgendermaßen gelöst:
SELECT
tb1.id,
IIf(tb2.check Is Null,1,tb2.check) AS check,
FROM
tb1
LEFT JOIN
tb2 ON
tb1.id = tb2.id
So wird mir der undefinierte Zustand als 1 ausgegeben, der "wahre" Zustand als -1 und der "falsche" Zustand als 0.
Allerdings musste ich in der Tabelle tb2 die Spalte check von "Ja/Nein" auf "Zahl" ändern, da NULL sonst nicht an VBA weitergegeben würde.
Nur so als Hilfestellung für nachfolgende, VBA-geplagte...
Gruß,
small-step