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
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.
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
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?