Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Access aus Microsoft 365: Kriterien in Feld mit VBA in Abfrage nicht möglich!?

6 views
Skip to first unread message

Louis Noser

unread,
Sep 26, 2020, 4:39:45 AM9/26/20
to
Grüss Euch

Wenn ich in einem Abfragefeld den Ausdruck

Sollklasse: Links([SollKtoNr];1)

mitsamt einem Kriterium erfasse, erscheint der Dialog 'Parameterwert
eingeben', wo 'SollKtoNr' gefragt ist. Wenn ich das Kriterium rausnehme,
wird die Abfrage ohne Meldung ausgeführt.

Entwurfsansicht mit einer von zwei Fehlermeldungen:
https://workupload.com/file/mWAQ4GXvg22

SQL:
SELECT tbl_Kontenplan.KtoNr AS SollKtoNr, tbl_Kontenplan_1.KtoNr AS
HabenKtoNr, Left([SollKtoNr],1) AS Sollklasse, Left([HabenKtoNr],1) AS
Habenklasse
FROM ((tbl_buchen_laufendes_Jahr INNER JOIN tbl_Kontenplan AS
tbl_Kontenplan_1 ON tbl_buchen_laufendes_Jahr.Haben =
tbl_Kontenplan_1.KtoName) LEFT JOIN tbl_Budgetbetreff_2020 ON
tbl_buchen_laufendes_Jahr.BuchNr = tbl_Budgetbetreff_2020.BuchNr) INNER
JOIN tbl_Kontenplan ON tbl_buchen_laufendes_Jahr.Soll =
tbl_Kontenplan.KtoName
WHERE (((Left([SollKtoNr],1))=3 Or (Left([SollKtoNr],1))=4)) OR
(((Left([HabenKtoNr],1))=3 Or (Left([HabenKtoNr],1))=4));

Ist mein Access kaputt?
Oder was mache ich falsch?

Vielen Dank.

Grüsse
Louis

Louis Noser

unread,
Sep 26, 2020, 11:41:11 AM9/26/20
to
Ich habe jetzt die Kriterien wie folgt gesetzt:
Wie "3*" Oder Wie "4*"

Screenshot Entwurfsansicht:
https://workupload.com/file/pyhk9z7qk89

So funktioniert es.

Es würde mich aber interessieren, warum die Lösung mit einer
VBA-Funktion und einem Kriterium auf dem Ergebnis nicht geht.

Grüsse
Louis

Karl Donaubauer

unread,
Sep 26, 2020, 5:52:14 PM9/26/20
to
Hallo!

schrieb Louis Noser:
> ...
Wenn man einen Alias (hier SollKtoNr) in einer berechneten Spalte in der
WHERE-Klausel verwendet, wird er immer als Parameter betrachtet . Du
müsstest daher auch für "HabenKtoNr" ein Parameterfenster bekommen.

Deine andere Variante funktioniert, weil du dort die Kriterien nicht
mehr auf berechnete Spalten anwendest, sondern direkt auf die Felder.
Die LIKE-Variante mit Asterisk hintennach ist eh besser, weil sie einen
evtl. vorhandenen Index am Feld verwenden kann.

--
Servus
Karl
*********
http://AccessDevCon.com
Access FAQ: http://donkarl.com

Louis Noser

unread,
Sep 26, 2020, 6:01:21 PM9/26/20
to
Hallo Karl

Am 26.09.2020 um 23:52 schrieb Karl Donaubauer:

> Wenn man einen Alias (hier SollKtoNr) in einer berechneten Spalte in der
> WHERE-Klausel verwendet, wird er immer als Parameter betrachtet . Du
> müsstest daher auch für "HabenKtoNr" ein Parameterfenster bekommen.

Das ist so.

> Deine andere Variante funktioniert, weil du dort die Kriterien nicht
> mehr auf berechnete Spalten anwendest, sondern direkt auf die Felder.

Wenn ich recht verstehe, funktionieren also Kriterien auf berechnete
Spalten nicht bzw. nie.

> Die LIKE-Variante mit Asterisk hintennach ist eh besser, weil sie einen
> evtl. vorhandenen Index am Feld verwenden kann.

Ich nehme an, das heisst, dass die Ausführung - hier von Like - mit
Index schneller vonstatten geht als ohne.

Vielen Dank für die Hinweise.

Grüsse
Louis

Karl Donaubauer

unread,
Sep 26, 2020, 7:07:56 PM9/26/20
to
Hallo!

schrieb Louis Noser:
> schrieb Karl Donaubauer:
>
>> Wenn man einen Alias (hier SollKtoNr) in einer berechneten Spalte in
>> der WHERE-Klausel verwendet, wird er immer als Parameter betrachtet .
>> Du müsstest daher auch für "HabenKtoNr" ein Parameterfenster bekommen.
>
> Das ist so.
>
>> Deine andere Variante funktioniert, weil du dort die Kriterien nicht
>> mehr auf berechnete Spalten anwendest, sondern direkt auf die Felder.
>
> Wenn ich recht verstehe, funktionieren also Kriterien auf berechnete
> Spalten nicht bzw. nie.

Nein. Kriterien auf berechnete Spalten funktionieren schon. Du könntest
z.B. in deiner neuen, funktionierenden Variante (mit Kriterium direkt
auf das Feld) auch wieder Links(Feldname; 1) und "3 oder 4" als
Kriterium verwenden.

Was nicht funktioniert, ist ein Kriterium auf eine berechnete Spalte,
wenn in dieser berechneten Spalte ein Alias vorkommt. Am konkreten Beispiel:

Du hattest zuerst "SollKtoNr" als Alias im SELECT festgelegt und ihn
danach in der berechneten Spalte "Sollklasse" verwendet. Das geht noch.

Sobald du aber ein Kriterium auf diese Spalte anwendest, d.h. wenn die
Sache im SQL-WHERE-Abschnitt vorkommt, kann Access diesen
weiterverwendeten Alias nicht mehr auflösen und fragt nach. Das ist eine
Beschränkung der Datenbankengine ACE.

>> Die LIKE-Variante mit Asterisk hintennach ist eh besser, weil sie
>> einen evtl. vorhandenen Index am Feld verwenden kann.
>
> Ich nehme an, das heisst, dass die Ausführung - hier von Like - mit
> Index schneller vonstatten geht als ohne.

Ja, wenn es einen entsprechenden Index gibt und wenn der * hinten steht,
nicht vorne. Sonst müssen wieder alle Datensätze durchsucht werden, wie
es bei einer berechneten Spalte mit Left() auf jeden Fall passiert.
0 new messages