collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 140
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14260
  • stats Beiträge insgesamt: 69842
  • stats Themen insgesamt: 9396
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Benötige Hilfe um Mehrfachauswahl (Listenfeld) an Abfrage zu übergeben  (Gelesen 13133 mal)

Offline joerg_w

  • Newbie
  • Beiträge: 28
Hallo,

EDIT: Aktuelleren Stand in den Beiträgen weiter unten.

Problem: Auswahl in Listenfeld mit Mehrfachauswahl als Kriterium für Abfragen verwenden.
« Letzte Änderung: Oktober 06, 2010, 11:12:27 von joerg_w »
 


Offline joerg_w

  • Newbie
  • Beiträge: 28
Hallo,

schonmal Danke für den Link. Ich habe allerdings Schwierigkeiten damit ihn auf mein
Problem zu übertragen. Ich bin noch nicht fit genug im "Programmierkram", um zu sehen, wo ich ansetzen muss.

Ich versuche noch einmal zusammenzufassen, wo ich gerade stehe. Ich will die Mehrfachauswahl in einem Listenfeld als Kriterium in einer Abfrage verwenden. Um das hinzubekommen, muss man anscheinend eine FOR-EACH-Schleife programmieren. QUELLE(http://www.kurt-aus-kienitz.de/knowhow/access/Beispiele/Formulare/KombiUndListen/ListKombiFelder.html#LbMehrfachauswahl2)

Das bekomme ich allerdings nicht alleine hin. Das nächste Problem wäre dann die Abfrage dazu zu bringen die mit der FOR_EACH-Schleife ermittelten Werte als Kriterium zu verwenden.

Mein Vorgehen:

Ich habe heute nochmal ein neues Formular angelegt, dass das Listenfeld L_Personen enthält, welches auf die Tabelle T_Personen zugreift.

Außerdem enthält das Formular einen Schalter, der beim Klicken zwei Dinge tut:

1. Ereignisprozedur auslösen. Im Moment steht da drin:


Option Compare Database

Private Sub Befehl2_Click()

End Sub
Private Sub Befehl3_Click()
On Error GoTo Err_Befehl3_Click

    Dim stDocName As String

    stDocName = "A_Auswertung_gesamt"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Befehl3_Click:
    Exit Sub

Err_Befehl3_Click:
    MsgBox Err.Description
    Resume Exit_Befehl3_Click
   
End Sub


Einen Artikel zum Thema habe ich hier gefunden - weiß allerdings nicht, wie ich das an meine Situation anpasse:

http://www.akademie.de/office-programme/office-microsoft-access-lernen/kurse/ms-access-und-vba-lernen-kurs/das-objektmodell-von-access/listenfelder.html

2. Abfrage A_Auswertung_gesamt starten (durch Befehl 3 der Ereignisprozedur). Gegenwärtig steht noch kein Kriterium drin. Soll die im Listenfeld gewählten und in der Ereignisprozedur ausgelesenen Werte als Kriterium für Personen verwenden.


Danke

Jörg


PS: Das Starten der Abfrage habe ich nicht selbst programmiert. Ich habe mir einfach einen Schalter mit der entsprechenden Funktion erstellt. Dass ich mittlerweile finde WO der VBL-Kram steht, war der Durchbruch des Tages ;)


« Letzte Änderung: Oktober 06, 2010, 10:54:14 von joerg_w »
 

Offline joerg_w

  • Newbie
  • Beiträge: 28
Ich habe in einem Thread eine Schleife gefunden, die tun soll, was ich tun will und habe sie in meine Ereignisprozedur eingebastelt. Sie läuft fehlerfrei durch, abe rich habe keine Ahnung, ob sie tut, was sie soll, weil ich nicht weiß, wie ich mir die ausgelesenen Werte anzeigen lassen oder diese als Kriterium an meine Abfrage weitergeben kann.

Ich poste hier den aktuellen Stand meiner Ereignisprpzedur und editiere diese immer, wnen ich weitergekommen bin.

Stand veraltet // Diskussion weiter unten

Option Compare Database

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim itm As Variant

    For Each itm In Me!L_Personen.ItemsSelected
        sAuswahl = sAuswahl & "," & Me!L_Personen.ItemData(itm)
        Debug.Print Me!L_Personen.ItemData(itm)
    Next itm

    'Für die Ausgabe ALLER selektierter Werte
    Debug.Print sAuswahl

    If Len(sAuswahl) > 0 Then sAuswahl = Mid(sAuswahl, 2)
End Sub
Private Sub Befehl3_Click()
On Error GoTo Err_Befehl3_Click

    Dim stDocName As String

    stDocName = "A_Auswertung_gesamt"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Befehl3_Click:
    Exit Sub

Err_Befehl3_Click:
    MsgBox Err.Description
    Resume Exit_Befehl3_Click
  
End Sub

Private Sub L_Personen_Click()

End Sub
« Letzte Änderung: Oktober 06, 2010, 14:21:23 von joerg_w »
 

database

  • Gast
Hallo,


nehme an, dass es sich dabei um die selektierten Werte handelt die dich interessieren - dann in etwa so:

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim itm As Variant

    For Each itm In Me!L_Personen.ItemsSelected
        sAuswahl = sAuswahl & "," & Me!L_Personen.ItemData(itm)
        Debug.Print Me!L_Personen.ItemData(itm)
    Next itm

    'Für die Ausgabe ALLER selektierter Werte
    Debug.Print sAuswahl

    If Len(sAuswahl) > 0 Then sAuswahl = Mid(sAuswahl, 2)
End Sub

Damit du die Ausgaben siehst musst du das Direktfenster anzeigen lassen.
Für die 2. Frage ...
kannst du mal den SQL-Code der Abfrage 'A_Auswertung_gesamt'  hier posten?

Grüße
« Letzte Änderung: Oktober 06, 2010, 11:50:53 von database »
 

Offline joerg_w

  • Newbie
  • Beiträge: 28
Hallo,

Danke für die Antwort!

Im Moment sieht es so aus:

Option Compare Database

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim itm As Variant

    For Each itm In Me!L_Personen.ItemsSelected
        sAuswahl = sAuswahl & "," & Me!L_Personen.ItemData(itm)
        Debug.Print Me!L_Personen.ItemData(itm)
    Next itm

    'Für die Ausgabe ALLER selektierter Werte
    Debug.Print sAuswahl

    If Len(sAuswahl) > 0 Then sAuswahl = Mid(sAuswahl, 2)
End Sub
Private Sub Befehl3_Click()
On Error GoTo Err_Befehl3_Click

    Dim stDocName As String

    stDocName = "A_Auswertung_gesamt"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Befehl3_Click:
    Exit Sub

Err_Befehl3_Click:
    MsgBox Err.Description
    Resume Exit_Befehl3_Click
   
End Sub

Private Sub L_Personen_Click()

End Sub

Im Direktfenster (Str+G) wird allerdings noch gar nichts angezeigt, wenn ich das Ding laufen lasse/den Schalter drücke.

Ich fange an so langsam(!) ein Gefühl dafür zu bekommen, was ich überhaupt mache (meine C64 Zeit kommt zurück...das ist lange her).

Mit Dim definiere ich anscheinend Variablen. String = Text; Variant = keine Ahnung ;)

Wenn ich richtig interpretiere ist das Ziel des ganzen für jede Auswahl in L_Personen einen Wert in sAuswahl zu schreiben
und die Werte mit Komma voneinander abzutrennen. Also müsste die Ausgabe später einmal sein:

sAuswahl= Person1, Person 2, ...



SQL der Abfrage : SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, T_Leistungsstunden.Stunden, T_Leistungsstunden.Datum
FROM T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr
ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;
« Letzte Änderung: Oktober 06, 2010, 12:16:32 von joerg_w »
 

database

  • Gast
Hi,

also wenn eine Auswahl stattgefunden hat, sollte da schon was angezeigt werden!

Versuch mal so:

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim strSQL as String
    Dim itm As Variant

    For Each itm In Me!L_Personen.ItemsSelected
        itm = Me!L_Personen.ItemData(itm)
        Debug.Print itm
        sAuswahl = sAuswahl & itm & ","
        Debug.Print "gesamt: " & sAuswahl
    Next itm

    If Len(sAuswahl) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahl = Left(sAuswahl, Len(sAuswahl) - 1)
    End If

    'Ändern der SQL für die Abfrage
    strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                   "T_Leistungsstunden.Stunden, T_Leistungsstunden.Datum " & _
                   "FROM T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr " & _
                   "WHERE T_Leistungsstunden.Person IN(" & sAuswahl & ") ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;"
   
    Currentdb.Querydefs!A_Auswertung_gesamt.SQL = strSQL

End Sub

Alternativ zu den Debug.Print Befehlen kannst du auch auf die Sub einen Haltepunkt setzen,
den Code dann schrittweise durchlaufen (F8) und kontrollieren was die Variablen enthalten (mit der Maus über die Variable fahren)

HTH

Peter
 

Offline joerg_w

  • Newbie
  • Beiträge: 28
Hallo,

wenn ich den Schalter STR+G drücke, öffnet sich das VBA-Fenster mit dem Direktfenster unten. Drücke ich dann auf den Schalter, öffnet sich die Abfrage. Im Direktfenster wird nichts angezeigt, meine Auswahl in der Liste hat keinen Effekt auf die Abfrage (grrr ;) ).

Ich häng mal den Code als Datei an. Hier nochmal zum Anschauen:

Option Compare Database

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim strSQL As String
    Dim itm As Variant

    For Each itm In Me!L_Personen.ItemsSelected
        itm = Me!L_Personen.ItemData(itm)
        Debug.Print itm
        sAuswahl = sAuswahl & itm & ","
        Debug.Print "gesamt: " & sAuswahl
    Next itm

    If Len(sAuswahl) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahl = Left(sAuswahl, Len(sAuswahl) - 1)
    End If

    'Ändern der SQL für die Abfrage
    strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                   "T_Leistungsstunden.Stunden, T_Leistungsstunden.Datum " & _
                   "FROM T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr " & _
                   "WHERE T_Leistungsstunden.Person IN(" & sAuswahl & ") ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;"
   
    CurrentDb.Querydefs!A_Auswertung_gesamt.SQL = strSQL

End Sub
Private Sub Befehl3_Click()
On Error GoTo Err_Befehl3_Click

    Dim stDocName As String

    stDocName = "A_Auswertung_gesamt"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Befehl3_Click:
    Exit Sub

Err_Befehl3_Click:
    MsgBox Err.Description
    Resume Exit_Befehl3_Click
   
End Sub

Private Sub L_Personen_Click()

End Sub


Gruß

Jörg

[Anhang gelöscht durch Administrator]
 

Offline joerg_w

  • Newbie
  • Beiträge: 28
Ich habe gerade das Formular nochmal neu angelegt und das Listenfeld nicht unbenannt, sondern einfach auf Liste0 (und Deinen code entsprechend angepasst) gelassen.

Damit bin ich einen Stück weitergekommen:

- Zuerst habe ich Deinen Code eingefügt. Mit Str+G konnte ich dann immer die Namen sehen, die ich ausgewählt habe. Das letzte Komme war allerdings nicht weg.

- Dann habe ich den Code zum Öffnen der Abfrage eingefügt. Diese öffnete sich auch - allerdings öffnete sich auch ein Fenster, dass mich bat einen Parameterwrt einzugeben - und zwar für die Namen, die ich ausgewählt habe.


Ich bastel nochmal neu & schau als mal hier rein.

Und hier der aktuelle Code:

Option Compare Database

Private Sub Befehl2_Click()
    Dim sAuswahl As String
    Dim strSQL As String
    Dim itm As Variant

    For Each itm In Me!Liste0.ItemsSelected
        itm = Me!Liste0.ItemData(itm)
        Debug.Print itm
        sAuswahl = sAuswahl & itm & ","
        Debug.Print "gesamt: " & sAuswahl
    Next itm

    If Len(sAuswahl) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahl = Left(sAuswahl, Len(sAuswahl) - 1)
    End If

    'Ändern der SQL für die Abfrage
    strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                   "T_Leistungsstunden.Stunden, T_Leistungsstunden.Datum " & _
                   "FROM T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr " & _
                   "WHERE T_Leistungsstunden.Person IN(" & sAuswahl & ") ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;"
   
    CurrentDb.Querydefs!A_Auswertung_gesamt.SQL = strSQL
   
    'Öffnen der Abfrage
    Dim stDocName As String

    stDocName = "A_Auswertung_gesamt"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
End Sub


Jörg

« Letzte Änderung: Oktober 06, 2010, 14:13:16 von joerg_w »
 

Offline joerg_w

  • Newbie
  • Beiträge: 28
Ich setze diesen Thread auf gelöst. Das Hauptproblem war das Auslesen des Listenfeldes. Das ist gelöst.

Das jetzt noch bleibende Problem ist die ausgelesenen Werte korrekt an die Abfrage zu übergeben. Dafür eröffne ich http://www.access-o-mania.de/forum/index.php?topic=13179.0
einen neuen Thread.

Gegenwärtig schreibt der Code das hier in die Abfragekriterien:

In ([Clemens];[Holger])

Dann verlangt er eine Eingabe (hier für Clemens und Holger --> Diese habe ich in der Liste ausgewählt).

Gruß & Tausend Dank...es geht voran

Jörg
« Letzte Änderung: Oktober 06, 2010, 14:33:38 von joerg_w »
 

database

  • Gast
Re: Benötige Hilfe um Mehrfachauswahl (Listenfeld) an Abfrage zu übergeben
« Antwort #10 am: Oktober 07, 2010, 09:03:12 »
Hallo Jörg,

Zitat
Ich setze diesen Thread auf gelöst

... was du dann auch machen solltest - in deinem ERSTEN Beitrag das 'gelöst' Icon anklicken - dann erscheint auch das grüne Häkchen ;)
 

 

Acces Datenbank (Access 2000-Dateiformat), benötige Unterstützung bei einer Abfr

Begonnen von TanteBoard Tabelle/Abfrage

Antworten: 14
Aufrufe: 6786
Letzter Beitrag März 31, 2012, 09:40:18
von DF6GL
Benötige Lösungsansatz zum Darstellen einer Kreuzung (Straßenverkehr)

Begonnen von harko38Board Tabelle/Abfrage

Antworten: 6
Aufrufe: 3592
Letzter Beitrag Oktober 10, 2012, 17:30:27
von MzKlMu
Benötige Hilfe zu Beziehungen, komme nicht weiter.

Begonnen von LernwilligerBoard Access-Hilfe

Antworten: 1
Aufrufe: 2479
Letzter Beitrag Januar 18, 2011, 13:00:45
von Lernwilliger
Benötige Hilfe für Palettenverwaltung

Begonnen von newman100Board Access-Hilfe

Antworten: 2
Aufrufe: 3487
Letzter Beitrag September 05, 2011, 22:57:40
von Hondo
Benötige Hilfe, wie ich meine Problemstellung angehen soll...

Begonnen von ScuttyBoard Access-Hilfe

Antworten: 3
Aufrufe: 1845
Letzter Beitrag April 13, 2012, 09:56:04
von Hondo