PDA

Vollständige Version anzeigen : Syntaxfehler in VBA


NetPower
22.01.2008, 10:10
Hallo Zusammen,

in einem Feld im Formular möchte ich die Anzahl von DS ermitteln.
Tabelle = tbl_Institutionen
Zählfeld = InstID = Zahl
StatusID = Zahl
Absage = Text

Habe es mit
Me!AnzMitglied = DCount("InstID", "tbl_Institutionen", "[StatusID] = 1 And [Absage] <>1")
versucht, geht aber nicht. Wenn ich bis tbl_Institutionen teste, erscheinen alle DS. Also funktioniert es. Kann mir jemand bei dem Code helfen.

Josef P.
22.01.2008, 10:13
Es wird am Datentyp von Absage liegen.
"... And [Absage] <>1" ... ist die Syntax für einen numerischen Typ.

BTW: Access ist ziemlich doof beim Umgang mit <> 1 oder auch bei <> '1'.
Es macht daraus ein NOT = 1. Was wiederum dazu führt, dass jeder vorhandene DS in der Tabelle geprüft wird. (Es wird kein Index genutzt.)
Eine Umformulierung hilft meistens.
z.B.: <1 or > 1 oder = 0 (falls nur 0 und 1 im Feld vorkommt)

NetPower
22.01.2008, 10:19
Hab es umgebaut auf
Me!AnzMitglied = DCount("InstID", "tbl_Institutionen", "[StatusID] = 1 And [Absage] <> '1'")
Als Ergebnis erscheint eine Null, wo normlerweise ein Wert von 120 stehen sollte.
Ist da noch was falsch?

Josef P.
22.01.2008, 10:20
Sind möglicherwiese im Feld Absage auch keine Werte (NULL) vorhanden?

NetPower
22.01.2008, 10:20
Korrekt!

Josef P.
22.01.2008, 10:25
Me!AnzMitglied = DCount("*", "tbl_Institutionen", "[StatusID] = 1 And ([Absage] < '1' or [Absage] > '1' or [Absage] IS NULL)")

Interessehalber:
Falls ein Index auf StatusID und Absage liegt, könntest du einmal versuchen, ob eine geteilte Ermittlung schneller wäre. (würde mich interessieren, ob das in diesem Fall schneller ist)

Me!AnzMitglied = _
DCount("*", "tbl_Institutionen", "[StatusID] = 1") _
- DCount("*", "tbl_Institutionen", "[StatusID] = 1 And [Absage] = '1')

NetPower
22.01.2008, 10:31
Die Felder sind nicht indiziert.

Habe die Tabelle derart aktualisiert, dass alle Nullfelder mit einer 0 aufgefüllt wurden. Dies war der Fehler.

Vielen Dank für Deine Hilfe!

Josef P.
22.01.2008, 10:39
Achte aber darauf, dass NULL nicht mehr vorkommen kann, wenn du nicht auf IS NULL prüfst. (NULL in der Tabelle nicht zulassen.)

NetPower
22.01.2008, 10:50
Vielen Dank für den Tipp!