online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon alex123456 vom 28.04.2022, 11:05 Options

Text aus Kombinationsfeld mit mehrfachauswahl als kriterium?

Hi, Ich hab ein suchformular bei dem ich verschiedene einträge aus dem datensatz auswählen kann und dann eine abfrage mit den formulareinträgen aufrufe. (zum beispiel im kombinationsfeld 'stadt' stehen alle städte von den personen, die in der datenbank erfasst sind und man wählt eine aus.)
kriterium: [Formulare]![Suchformular]![Stadt]
oder in SQL: WHERE Daten.[Stadt]=[Formulare]![Suchformular]![Stadt];
soweit so gut. funktioniert auch.

jetzt möchte ich aber, dass das kombinationsfeld 'stadt' mehrfachauswahl zulässt, ich also zum beispiel 'Barcelona, Prag, Paris' auswählen kann und er dann alle einträge aus einem dieser städte findet... aus irgendeinem grund kann ich das feld nun aber nicht mehr auslesen.
Der plan wäre gewesen es so zu machen:
kriterium: In ([Formulare]![Suchformular]![Stadt])
bzw. in SQL: WHERE Daten.[Stadt] In ([Formulare]![Suchformular]![Stadt]);

wenn ich eine neue Abfrage mache mit
SELECT [Formulare]![Suchformular]![Stadt] schreibt er mir 'Feld nicht gefunden', alle anderen felder aus dem gleichen formular gibt er auf diese art aber aus (incl. kombinationsfelder ohne mehrfachauswahl)

bin für jeden hinweis dankbar,
LG, A


Antwort schreiben

Antwort 1 von alex123456 vom 28.04.2022, 13:35 Options

irgendwer?

ich denk mir mal, das kann nicht so schwer sein... vermutlich irgendeine blöde kleinichkeit auf die man aufpassen muss??

THX, A

Antwort 2 von RaHi vom 28.04.2022, 19:57 Options

Hallo Alex,

sei nicht so ungeduldig, wir haben ja auch noch andere Sachen zu tun ;-) So einfach wie du dir das vorstellst, geht das nicht. Ich habe mal eine alte Routine ausgegraben (Access 2003), die dir helfen könnte:
Public Function getExtendedList(ctl As Control, default As Variant, Optional delimiter As String = "") As Variant
Dim c As Variant
Dim res As Variant
For Each c In ctl.ItemsSelected
res = res & IIf(res = "", "", ",") & delimiter & ctl.ItemData(c) & delimiter
Next
If res = "" Then res = default
getExtendedList = res
End Function
Damit kannst du z.B. einem Report ein SQL-Kriterium mitgeben, z.B. so mit PList als Multiselect-Liste):
Private Sub btnReport_Click()
Dim s As String
s = getExtendedList(Me!PList, "", """")
If s <> "" Then
    DoCmd.OpenReport "Projekt", acViewPreview, , "Projektname in (" & s & ")"
   Else
    MsgBox "Bitte zuerst ein oder mehrere Projekte auswählen"
End If

End Sub

Den Parameter "default" benutze ich zwar nicht, könntest du aber noch sinnvoll einbauen, z.B. statt einer MsgBox. Hast du dir so etwas vorgestellt?

Gruß
Ralf

Antwort 3 von Alex123456 vom 29.04.2022, 11:18 Options

Hi, Erst mal danke für die antwort :) wollte auch niemanden stressen...

nachdem ich den string, den deine funktion produziert auch gern im selben formular zur verfügung hätte hab ich das ganze jetzt so gemacht:
 Private Sub mehrfachauswahlkombifeld_Change()
    Dim c As Variant
    Dim res As Variant
    Dim ctl As Control
    ctl = Me![mehrfachauswahlkombifeld]
    For Each c In ctl.ItemsSelected
        res = res & IIf(res = "", "", ",") & ctl.ItemData(c)
    Next
'    If res = "" Then res = default
    Me![mehrfachauswahlkombifeld as String] = res
End Sub 

Das problem is nur, das ich den Fehler "Objektvariable oder With-Blockvariable nicht festgelegt"... in zeile
ctl = Me![mehrfachauswahlkombifeld]
.

Woran kann das liegen?

thx, alex

Antwort 4 von Alex123456 vom 29.04.2022, 11:56 Options

Hab einen Fehler gefungen...
code muss so lauten:

Private Sub mehrfachauswahlkombifeld_Change()
    Dim c As Variant
    Dim res As Variant
    Dim ctl As Control
    Set ctl = Me![mehrfachauswahlkombifeld]
    For Each c In ctl.ItemsSelected
        res = res & IIf(res = "", "", ",") & ctl.ItemData(c)
    Next
'    If res = "" Then res = default
    Me![mehrfachauswahlkombifeld as String] = res
End Sub 


jetzt is aber das problem, dass er in die for-schleife nicht reingeht... ich kann mit
    test = Me![Probe Type].ItemData(0)

die einzelnen einträge abrufen aber wie gesagt in die for schleife geht er nicht rein... irgendein problem mit dem ItemsSelected vieleicht?

lg, A

Antwort 5 von Alex123456 vom 29.04.2022, 15:43 Options

Also ich hab mich jetzt noch gespielt und es funktioniert jetzt, dass ich die selektierten einträge in ein textfeld schreibe ABER nur, wenn ich statt einem kombinationsfeld ein listenfeld nehme... warum? is nämlich nicht so schön, weil ich keine möglichkeit habe meine abfrage im _Change() ereignis aufzurufen (gibts nicht bei listenfeld).

außerdem schaff ichs nicht, eine abfrage zu machen, wo mein textfeldinhalt als argument in einem IN-Kriterium vorkommt.

WHERE (AllData.[Stadt]) In ([Formulare]![Search for something]![Textfeld Staedte as String]);

das funktioniert, wenn ich nur eine stadt markier (im textfeld 'Textfeld staedte as string' steht dann z.b. Rom) aber nicht, wenn ich mehrere einträge hab (z.b. Rom, Paris)
hab auch schon 'Rom','Paris', "Rom","Paris", "Rom,Paris" usw. ausprobiert...

Ich hätte auch kein problem, das in vba zu machen und den string (s) direkt weiterzugeben wie ralf das vorgeschlagen hat, nur weiß ich da nicht, wie ich der sql abfrage ein kriterium mitgebe (sasd wäre dann "AllData.[Stadt] In (S)")

Antwort 6 von RaHi vom 29.04.2022, 16:35 Options

Hallo alex,

Überlege mal, warum ein "on change" Ereignis keinen Sinn bei einer Mehrfachauswahl hat. Richtig, das Programm kann
nicht wissen, wann du alle Felder ausgewält hast. Kannst du bei einer Combobox überhaupt eine Mehrfachauswahl
einstellen? Beschreibe mal deine Folgeaktion und poste was du mit dem sql anstellen willst.

Gruß Ralf

Antwort 7 von alex123456 vom 29.04.2022, 16:48 Options

mit der combobox und mehrfachauswahl wäre es ganau so wie ich wollte: du klickst auf den kleinen pfeil, eine auswahl mit kontrollkästchen öffnet sich, du wählst die aus, die du möchtest und wenn du die combobox wieder zumachst, dann tritt das Change() ereignis ein... laut hilfe sollte dein code auch für das funktionieren, tut er aber nicht. is nicht weiter schlimm, jetzt hab ich halt einen button neben dem listenfeld um selbiges auszulesen.

was ich dann machen will is nichts anderes als eine abfrage öffnen, wo ich alle datensätze drin hab mit den städten die aus dem listenfeld ausgelesen wurden (sind also sowohl als string mit beliebigem delimiter -thx to you- als eben auch in einem textfeld vorhanden)
ich dachte mir es wäre einfach(er) in der abfrage mit dem textfeld zu vergleichen (wie oben gepostet)

was weiter geschehen soll:
ich öffne die abfrage zum beispiel um zu zählen wie viele datensätze er gefunden hat.
    DoCmd.OpenQuery tb, acViewNormal, acReadOnly
        counter = DCount("[ID]", tb)
    DoCmd.Close acQuery, tb, acSaveNo

in weiterer folge soll ein zweites formular geöffnet werden das anderst aussieht und nur die datensätze aus der abfrage enthält, aber das krieg ich schon hin... nur das abfragekriterium kann ich nicht übergeben.

also im prinzip den code den du für reports gepostet hast irgendwie auf das öffnen/neu berechnen einer abfrage umgemünzt...

danke fürs mitdenken und helfen,
LG, Alex

Antwort 8 von RaHi vom 29.04.2022, 22:21 Options

Hallo Alex,

also die Zeilen zählen, kannst du folgendermaßen
Msgbox Dcount("*","Grundtabelle","Stadt in (" & Me![mehrfachauswahlkombifeld as String] & ")") 

Dein Zählversuch sollte so nicht funktionieren. Du kannst auch einem Formular die Grundtabelle hinterlegen und alle relevanten Felder ins Formular ziehen. Die Standardansicht setzt du auf "Datenblatt". Danach kannst du meine Variante des Report-Aufrufs für das Formular verwenden. Probiere es aus.

Gruß
Ralf

Ähnliche Themen

Kombinationsfeld Access2007
fpmarl  12.12.2008 - 34 Hits - 1 Antwort

Access: Abfrage nach Auswahl in Kombinationsfeld aktualisieren
Ruslan  29.06.2009 - 710 Hits - 7 Antworten

Daten aus Kombinationsfeld in Textfeld auslesen lassen
Evolut1on  10.09.2009 - 302 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026