IS NULL oder FALSCH kann ich nicht in einer Jet-DB abfragen

23/06/2008 - 14:42 von Andy Dorwald | Report spam
Hallo NG,

ich sitze hier vor einem scheinbar ganz trivialem Problem, bekomme es aber
dennoch nicht hin.

Habe ein True/False-Feld in einer Jet-DB, welches in einer Tabelle ist, die
per verschalteltem LEFT JOIN an einer Eltern-Tabelle hàngt.

Dadurch ergeben sich drei Fàlle:

1. CHILD-DS existiert und das Feld enthàlt das Wort "WAHR" (schlimm genug,
dass MS hier Worte zurückgibt...!)
2. CHILD-DS existiert und das Feld enthàlt das Wort "FALSCH"
3. ADO gibt "NULL" zurück, da das LEFT JOIN kein CHILD-Datensatz enthàlt

Nun will ich in meinem "Do Until .EOF" wissen, ob "TRUE" zurückkommt bzw.
"NOT FALSE".

Mit z. B. cbool(rs.Field(0).Value) komme ich da nicht weit, weil sobald
Value = NULL ist, kommt "Ungültige Verwendung von NULL".

Wie schaffe ich es nun in meiner Schleife am effektivsten (ohne viel IF und
THEN) abzufragen, ob ein "TRUE" zurückgekommen ist!?

Danke
Andy
 

Lesen sie die antworten

#1 Peter Götz
23/06/2008 - 21:23 | Warnen spam
Hallo Andy,

NG,

ich sitze hier vor einem scheinbar ganz trivialem
Problem, bekomme es aber dennoch nicht hin.

Habe ein True/False-Feld in einer Jet-DB,



Also ein Feld vom Typ Boolean?


welches in einer Tabelle ist, die per verschalteltem
LEFT JOIN an einer Eltern-Tabelle hàngt.

Dadurch ergeben sich drei Fàlle:

1. CHILD-DS existiert und das Feld enthàlt das
Wort "WAHR"



Wenn das Feld vom Typ Boolean ist, dann gibt
es True (-1) oder False (0) zurück. "Wahr" oder "False"
wird daraus, wenn True oder False zu einem String
umgewandelt werden.

(schlimm genug, dass MS hier Worte zurückgibt...!)



MS gibt keine Worte zurück, wenn Du True und/oder
False nicht zu Strings umwandelst.

2. CHILD-DS existiert und das Feld enthàlt das
Wort "FALSCH"



Ein Feld vom Typ Boolean liefert auch kein "Falsch",
sondern den Wert False (0) und erst durch Umwandlung
zu einem String wird daraus (auf einem deutschen System)
der String "Falsch".


3. ADO gibt "NULL" zurück, da das LEFT JOIN
kein CHILD-Datensatz enthàlt

Nun will ich in meinem "Do Until .EOF" wissen,



In welchem "Do Until .EOF"?


ob "TRUE" zurückkommt bzw.
"NOT FALSE".



Select case True
Case RS.Fields(x).Value I

Mit z. B. cbool(rs.Field(0).Value) komme ich da
nicht weit,



Ein

CBool(RS.Fields(0).Value)

wàre hölzernes Holz, wenn das Feld ohnehin schon
den FeldTyp Boolean hat.


weil sobald Value = NULL ist,



Nicht

Value = Null

sondern

IsNull(Value)

kommt "Ungültige Verwendung von NULL".

Wie schaffe ich es nun in meiner Schleife am
effektivsten (ohne viel IF und THEN) abzufragen,
ob ein "TRUE" zurückgekommen ist!?



Ohne If...Then oder Select Case geht es nicht, da
Du in jedem Fall erst mal das Feld auf einen
Nullwert [isNull(Value)] prüfen musst.

Auf NullWert kannst Du so

Select Case True
Case IsNull(RS.Fields(x).Value)
Case RS.Fields(x).Value = False
Case RS.Fields(x).Value = True
' Das Feld hat den Wert True
' exit
End Select

oder so

If Not IsNull(RS.Fields(x).Value) Then
If RS.Fields(x).Value = True Then
' Feld hat den Wert True
' exit
End If
End If

prüfen.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen