Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

AnwendenFilter mit Parameterabfrage im Formular geht nicht

Begonnen von Elisabeth Molder, November 18, 2010, 19:28:08

⏪ vorheriges - nächstes ⏩

Elisabeth Molder

Hallo Forum, :(

ich bastle an einer Datenbank, in welcher alte Prüfungsaufgaben eingegeben werden. Hintergrund ist, dass nach Beruf, Prüfungsjahr und eben gewisse Prüfungsthemen gefiltert werden kann.

Dafür habe ich eine Parameterabfrage über vierTabellen erstellt. Dabei ist eine m:n Beziehung dabei. Die Parameterabfrage funktioniert wunderbar. Konkret gesagt, sie fragt nacheinander zuerst den Beruf, dann das Prüfungsjahr und schließlich das gwünschte Thema, welches angezeigt werden soll, ab.

Soweit so gut. Diese Parameterabfrage soll nun über ein Formular ausgeführt werden. Hierfür habe ich eine Schaltfläche (Filtern) eingebaut, welche auf ein Makro AnwendenFiltern - basierend auf eben dieser Parameterabfrage - beruht.

Nach Beruf und Jahr fragt er ab, aber beim Thema öffnet sich ein Fenster mehr als erwünscht mit dem Text tbl_Thema.Themengebiet (dort wo sonst meine Parameterfrage steht), erst dann kommen meine definierten Parameter. Warum ist das so? Ich vermute, dass es an dieser m:n Beziehung liegt.

Wie bringe ich das Makro dazu, mir meine Parameterabfrage so auzuführen, wie sie es auch im Abfragefenster macht?

Bin für jede Hilfe sehr dankbar.

Sisssi

MzKlMu

Hallo,
achte darauf, dass es das Feld Themengebiet nur 1x in der Abfrage gibt. Und nicht aus verschiedenen Tabellen dasgeleiche Feld vorhanden ist.
Gruß Klaus

Sisssi

Hallo,

danke für die superschnelle Antwort. Der Abfrageentwurf enthält nur einmal das Feld Themengebiet. Die Parameterabfrage selbst funktioniert ja auch. Hast du vielleicht eine andere Idee? Ziel ist es, Datensätze im Formular zu filtern, so dass man durch das Formular blättern kann. Anschließend soll die Auswahl in einen Bericht übeführt werden.

Sissi

database

Hallo,

ich glaube, dein Problem rührt von diesem Makro her.

Was ich noch nicht ganz klar verstehe ist der Umstand, dass du eine Parameterabfrage erstellt hast, die richtig funktioniert und hinterher nochmals filtern willst.
Kann es sein, dass das Makro 'AnwendenFilter' einen Filter auf das gleiche Feld setzt, das du per Parameter einschränkst? (tbl_Thema.Themengebiet)

Sisssi

Hallo,

also dieses Makro AnwendenFilter macht nichts anderes, als eben diese Parameterabfrage aufzurufen. D. h. das eigentliche Filtern erledigt die Parameterabfrage (zumidest verstehe ich das so). Filter bei diesem Accessmakros bedeutet schlicht Abfrage.

Ich weiß ja das man von Makros die Finger lassen sollte, aber VBA kann ich erst recht nicht. Die Schaltfläche könnte man ja einfach per Assistent mit der Parameterabfrage verknüpfen, aber dann öffnet sich das Abfrageergebnisfenster und ich möchte die Daten gern in dem Formular angezeigt haben.

Bei der Schaltfläche wird als Ereignisprozedur folgender Code angezeigt:
Private Sub Befehl53_Click()
On Error GoTo Err_Befehl53_Click

    Dim stDocName As String

    stDocName = "mcgrpFiltern.mcrFilter_ein"
    DoCmd.RunMacro stDocName

Exit_Befehl53_Click:
    Exit Sub

Err_Befehl53_Click:
    MsgBox Err.Description
    Resume Exit_Befehl53_Click
   
End Sub


Und bei den Eigenschaften des Formulars (Register Daten - Filter) folgendes:
((((tbl_Situation.Beruf) Like "*" & [Beruf? - Für beide Berufe Feld leer lassen"]) AND ((tbl_Thema.Themengebiet) Like [Themengebiet? (mit *)] Or (tbl_Thema.Themengebiet) Like [Noch ein Themengebiet? (mit *)]) AND ((Year([Prüfungsdatum]))>=[Anfangsjahr] And (Year([Prüfungsdatum]))<=[Endjahr])))

Vielen Dank bisher.
Sisssi

database

Hallo,

ZitatIch weiß ja das man von Makros die Finger lassen sollte...
Das ist ja schon ein richtig guter Ansatz!  ;) ;D

Du könntest stattdessen die Abfrage, die ja einen Namen hat, dem Formular als Datenherkunft zuweisen.
Schmeiß auch diese Einträge mal raus ...   (Register Daten - Filter)

Diese hier angegebenen Parameter hast du ja in der Abfrage schon drinstehen - oder?

Beim Öffnen des Formulars wird dann die Parameterliste erfragt und die Daten dementsprechend angezeigt.
Um andere Daten ins Formular zu bekommen ohne es zu schließen und neu zu öffnen KÖNNTEST du einfach die Formulardaten aktualisieren,
wodurch die zugrundeligende Abfrage erneut ausgeführt wird - dabei werden die Parameter wieder erfragt.

Also ändere den Code für's Click-Ereignis des Buttons ...

Private Sub Befehl53_Click()

    Me.Requery
   
End Sub



Versuch das mal an einer KOPIE deiner DB.

Sisssi

 :) Hallo,

das trifft es nicht ganz, ist aber durchaus eine Alterntive die ich aufgreifen werde. Vielen Dank. Es funktioniert auch, habe es soeben ausprobiert. Ursprünglich sollte das Formular zunächst alle Datensätze anzeigen und dann auf Knopfdruck eben die Abfrage starten.

Jetzt lege ich halt nach deiner Beschreibung ein zweites Formular an, in welchem gefiltert wird. Da wäre ich alleine nie drauf gekommen.

Nochmals Danke schön
Sisssi

database

#7
Hallo,

das lässt sich sicher auch so bewerkstelligen, wie du das geschildert hast.
dazu ist aber deine Abfrage als Datenherkunft für das Formular nicht geeignet, da diese bei jeder Ausführung die Parameter einliest.
Du müsstest daher eine Abfrage OHNE die Parameter erstellen, die eben alle Datensätze liefert.
Diese Abfrage wird dann dem Formular als Datenherkunft hinterlegt.
Beim Klick auf den Button weist man der Abfrage dann die SQL mit der Parametergeschichte zu und führt ein Requery auf das Formular aus (me.Requery)

also sollte dann der Buttonklick folgendes machen...


Private Sub Befehl53_Click()
 
   Currentdb.Querydefs("DeineAbfrage").SQL = "SELECT ... " ---> hier kopierst du die GESAMTE SQL deiner Parameterabfrage hin
   Me.Requery
   
End Sub


Dann erzeugst du einen 2. Button, der beim Klick wieder alle Datensätze anzeigen soll und weist dem folgenden Code fürs Klick-Ereignis zu:


Private Sub BefehlAlleDaten_Click()
 
   Currentdb.Querydefs("DeineAbfrage").SQL = "SELECT ... " ----> Hier die GESAMTE SQL der Abfrage OHNE Parameter einfügen
   Me.Requery
   
End Sub


Um noch zu erreichen, dass bei Öffnen des Formulars alle Daten angezeigt werden, fügst du ins Close-Ereignis des Formulars ein...


Private Sub Form_Close()
 
    Currentdb.Querydefs("DeineAbfrage").SQL = "SELECT ... " ----> GESAMTE SQL der Abfrage OHNE Parameter!
       
End Sub

somit wird die Abfrage wieder auf ALLE Daten geändert, wenn es geschlossen wird, beim erneuten Öffnen kommen alle Daten zur Anzeige.


sollte eigentlich dein gewünschtes Ergebnis zeigen

Grüße

Peter