PDA

Vollständige Version anzeigen : Abfrage - mehrere, unterschiedlich viele Kriterien


AusmStiftingtol
04.06.2012, 11:08
Hallo

ich habe eine Spalte mit einem Feld "Kennung"
je nach Vorauswahl kann es sein, dass ein oder mehrere Kriterien ausgewählt werden.
Hab mich mit globalen Variablen und Functions herumgespielt. Aber ich kann immer nur ein Kriterium Variabel gestalten. In SQL sieht das dann etwa so aus
Select...From...
Where (Tab_XXX.Kennung = GetEPfilter())
GROUP BY...;

mit nur einem Wert für GetEPfilter() kein Problem. Habe ich aber zwei oder mehrere Kriterien geht das nicht mehr bzw. weiß wer wie man das insgesamt variabel gestalten kann?

Atrus2711
04.06.2012, 11:41
Hi,

wenn die Bedingungen sich auf unterschiedliche Felder beziehen, könntest du das zusammensetzen (Demo: hier (http://www.ms-office-forum.de/forum/showthread.php?t=254941)) oder die Alternativen einzeln abtesten (Erklärung: Donkarl (http://www.donkarl.com?FAQ3.14)).

Wenn es nur um Alternativwerte im gleichen Feld geht, wäre statt des Gleichheitszeichens ein IN sinnvoll, und die geheimnisvolle Funktion müsste dann die gewünschten Werte als Kette zurückgeben, so dass z.B. sowas entsteht: ... WHERE Kennung IN (1,5,42)

AusmStiftingtol
04.06.2012, 11:57
Hallo

Danke vorab
Aner es funktioniert nur wenn ich die Werte direkt in der SQL-Ansicht der Abfrage schreibe, aber ich kann die Kriterien nicht per Public Function übergeben.
Die Kennung besteht aus Buchstaben und irgendwie kann ich glaube ich die Anführungszeichen nicht richtig übergeben. Er fasst das dann immer als einen Ausdruck zusammen.


mfg Peter


edit: ich bin grad dabei die Abfrage per Vba als ganzes zu erstellen mit "CurrentDb.QueryDefs("Abf_XXX").SQL=....."
schaut sehr gut aus bis jetzt.

Atrus2711
04.06.2012, 12:16
In SQL gehen Textvergleiche so:
...WHERE DeinFeld = "abc"
...WHERE DeinFeld In ("dies", "das", "jenes")

Wenn du SQL in VBA zusammensetzt, kollidieren die Anführungszeichen aus SQL gerne mit denen aus VBA. Du kannst in diesem Fall die Anführungsstriche aus SQL durch Hochkommas ersetzen:
strSQL = "SELECT * FROM Tabelle WHERE DeinFeld = 'abc'"
oder
strSQL = "SELECT * FROM Tabelle WHERE DeinFeld IN ('dies', 'das', 'jenes')"
oder bei Variableneinsatz
strSQL = "SELECT * FROM Tabelle WHERE DeinFeld = '" & strWhatever & "'"

AusmStiftingtol
04.06.2012, 12:27
Hallo Martin,

Ja eben die Anführungsstriche sind ein Problem. Daher erstell ich jetzt per VBA den ganzen SQLString wie im letzten Beispiel und ändere mit
CurrentDB.QueryDefs die ganze Abfrage, da diese Basis für weitere Abfragen ist

Und läuft fehlerfrei.

Danke
mfg Peter