SQL IN() Klausel mit Rückgabewert von Funktion füllen

04/08/2009 - 11:42 von Arne | Report spam
Hallo liebe NG,
ich habe eine Abfrage die ich nach markierten Elementen aus einem
Listenfeld filtern möchte. Bis jetzt habe ich per VBA eine eigene
QuerryDef angelegt in diese dann ausgeführt. Seiddem neuerdings
mehrere Benutzer gleichzeitig auf der DB arbeiten geht das aber nicht
mehr. Es entstehen oft Konflikte wenn 2 Leute die gleiche Abfrage
öffnen/veràndern wollen. Is ja auch klar.

Jetzt hab ich mir gedacht ich bastel ne Funktion die einen String
zurückgibt der dann gleich in der SQL Abfrage landet. Ich würde in der
Abfrage also schreiben:

WHERE (((gruppen.gruppen_id) In (GroupFilter())) AND...

der Code zu GroupFilter() sieht so aus:
Public Function GroupFilter() As String
Dim ListBox As Control
Set ListBox = Forms!start!liste_gruppen

Dim varItem As Variant
Dim strIN As String

For Each varItem In ListBox.ItemsSelected
strIN = strIN & Chr(34) & ListBox.ItemData(varItem) & Chr(34)
& ","
Next varItem

If strIN <> "" Then
strIN = Left(strIN, Len(strIN) - 2) 'letztes Komma abschneiden
'strIN = "In(" & strIN & ")" 'in SQL IN() einsetzen
'Else
'strIN = "In(""0000-000-0"")"
End If
GroupFilter = strIN
End Function

Leider ist die Abfrage am Ende immer leer. Ich finde meinen Fehler
aber nicht. Gibts es ne Möglichkeit sich den SQL-Text vor der Abfrage
nochmal anzeigen zulassen?

In einem anderen Thread hab ich etwas über Trennzeichen gelesen.
Aber ; als Trenner und nen zusàtzliches Leerzeichen haben auch nicht
geholfen. Die Abfrage ist immernoch leer. Ich hab auch irgendwo eine
DB "FIlterAusText" gefunden. ABer die arbeitet auch mit einer
Hilfstabelle. Das ist in einer Multiuser Umgebung auch nciht wirklich
gut.

Gruß Arne
 

Lesen sie die antworten

#1 Mark Doerbandt
04/08/2009 - 11:47 | Warnen spam
Hallo, Arne,

Arne:

ich habe eine Abfrage die ich nach markierten Elementen aus einem
Listenfeld filtern möchte. Bis jetzt habe ich per VBA eine eigene
QuerryDef angelegt in diese dann ausgeführt. Seiddem neuerdings
mehrere Benutzer gleichzeitig auf der DB arbeiten geht das aber nicht
mehr. Es entstehen oft Konflikte wenn 2 Leute die gleiche Abfrage
öffnen/veràndern wollen. Is ja auch klar.



lege Dir eine (ggf. temporàre) Tabelle an, in der jeder Benutzer eine
Art SessionID in einer Spalte hat und benutze diese im SubSelect.

Jetzt hab ich mir gedacht ich bastel ne Funktion die einen String
zurückgibt der dann gleich in der SQL Abfrage landet. Ich würde in der
Abfrage also schreiben:

WHERE (((gruppen.gruppen_id) In (GroupFilter())) AND...



Das geht so nicht.

Gruss - Mark

Ähnliche fragen