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

Mehrfachauswahl aus Listenfeld übe r Funktion an Abfrage übergeben...

378 views
Skip to first unread message

gleise

unread,
Mar 15, 2005, 6:54:04 AM3/15/05
to
Servus NG,

ich sitze seit einem Tag an dem selben Problem und bin schier am
verzweifeln...also darum meine Frage:

Ist es überhaupt möglich, mehrere Kriterien an eine Abfrag über eine
Funktion zu übergeben (also Mehrfachauswahl aus einem Listenfeld)???

Hier kurz mein Quelltext:
Public Function build_string() As String


Dim sql As String, where As String
Dim varElem As Variant, ctl As Control
Set ctl = [Forms]![KUMULIERT_Q]![select_proposal]


For Each varElem In ctl.ItemsSelected
where = where & " Oder " & CStr(ctl.Column(0, varElem)) & ""
Next varElem

If where <> "" Then
build_string = build_string & Mid(where, 7) 'Mid, um das erste
Or und Blanks abzuschneiden
End If

'MsgBox build_string


End Function


...jetzt sage ich einfach in der Abfrage: ...
HAVING (((CALCULATION_TBL.PROPOSAL_NR)=build_string()))

Gut, das funktioniert, allerdings nur dann, wenn ein Datensatz im
Listenfeld ausgewählt ist!
Ok, ich bin den Krückenweg über SQL im Makro auch gegangen - es
funktioniert auch, nur Änderungen der Abfrage sind dann nur über
Quellqode möglich und das ist zu umständlich.

Ich hab auch schon versucht, mit 'Gänsefüßchen' zu
tricksen...allerdings ohne Erfolg.

Danke für Tipps,

Guido Dolfus

Mark Doerbandt

unread,
Mar 15, 2005, 7:18:30 AM3/15/05
to
Hallo,

gleise:

Bitte verwende hier Deinen vollen (Vor- und Zu-) Namen. Danke.

> Ist es überhaupt möglich, mehrere Kriterien an eine Abfrag über eine
> Funktion zu übergeben (also Mehrfachauswahl aus einem Listenfeld)???

Ja.

> where = where & " Oder " & CStr(ctl.Column(0, varElem)) & ""

Hier muesste OR stehen.

> HAVING (((CALCULATION_TBL.PROPOSAL_NR)=build_string()))

Das kann fuer mehrere Datensaetze nicht gehen.

> Ok, ich bin den Krückenweg über SQL im Makro auch gegangen - es
> funktioniert auch, nur Änderungen der Abfrage sind dann nur über
> Quellqode möglich und das ist zu umständlich.

Mit Makro meinst Du hier VBA? Diese Loesung ist einfach und
funktioniert. Was stoert Dich daran?

Gruss - Mark

--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.

Henry Habermacher [MVP Access]

unread,
Mar 15, 2005, 9:42:53 PM3/15/05
to
Hallo gleise

Bitte verwende hier den Realnamen

gleise <Guido....@Dornier.eads.net> wrote:

Statt der OR Bedingung ist es bei Mehrfachauswahlen oft einfacher, ein
IN(..) Operator zu verwenden. In diesem Fall würde dann Deine Funktion so
aussehen (Namen musst Du noch anpassen):

Public Function getInString() As String
Dim varElem As Variant
Dim varTemp As Variant
Dim ctl As Control
Set ctl = Forms("aTestForm")!DeineListBox
varTemp = Null


For Each varElem In ctl.ItemsSelected

varTemp = (varTemp + ",") & "'" & CStr(ctl.Column(0, varElem)) & "'"
Next
getInString = Nz(varTemp, "'nichts ausgewählt'")
Set ctl = Nothing
End Function

Der Aufruf dann

HAVING Calculation_tbl.Proposal_Nr IN ( getInString )

Hab's jetzt nicht ausprobiert, aber auf diese Art müsste es eigentlich auch
gehen. Ich ziehe jedoch den Weg vor, in solchen Fällen das SQL Statement der
Query per VBA Code zu erzeugen und dann den Funktionsaufruf in VBA
durchzuführen und das Ergebnis im SQL Statement einzufügen.

Gruss
Henry

--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com (neu mit Suchfunktion!)
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org

gleise

unread,
Mar 16, 2005, 3:00:12 AM3/16/05
to
Mark Doerbandt <spamre...@doerbandt.de> wrote in message news:<d16nb7...@dit8.doerbandt.de>...

> Hallo,
>
> gleise:
>
> Bitte verwende hier Deinen vollen (Vor- und Zu-) Namen. Danke.
>
> > Ist es überhaupt möglich, mehrere Kriterien an eine Abfrag über eine
> > Funktion zu übergeben (also Mehrfachauswahl aus einem Listenfeld)???
>
> Ja.
>
> > where = where & " Oder " & CStr(ctl.Column(0, varElem)) & ""
>
> Hier muesste OR stehen.
>
> > HAVING (((CALCULATION_TBL.PROPOSAL_NR)=build_string()))
>
> Das kann fuer mehrere Datensaetze nicht gehen.
>
> > Ok, ich bin den Krückenweg über SQL im Makro auch gegangen - es
> > funktioniert auch, nur Änderungen der Abfrage sind dann nur über
> > Quellqode möglich und das ist zu umständlich.
>
> Mit Makro meinst Du hier VBA? Diese Loesung ist einfach und
> funktioniert. Was stoert Dich daran?
>
> Gruss - Mark


Schon mal danke für die Antwort.

Natürlich hab ich das auch schon mit OR versucht...das geht halt auch
nicht.
Das Problem ist sicher, dass die Abfrage den übergebenen String in "
setzt und somit nach dem ganzen Ausdruck selektieren will!!!

Makro war falsch - meinte natürlich Modul!

Die Fuktion möchte ich aber in der Abfrage (Editor) aufrufen und
Adhoc-Abfragen so einfach wie möglich erstellen/erstellen lassen.

Also brauche ich im Prinzip eine Alternative zu:
HAVING (((CALCULATION_TBL.PROPOSAL_NR)=build_string()))
wegen mir auch WHERE...

Ich hab immernoch keine Idee...


PS: Wie kann ich denn den Namen ändern...in Vor/Zuname?

0 new messages