Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage mit Suchfeld auf Formular verbinden

Begonnen von ChemSim, Februar 25, 2024, 21:08:28

⏪ vorheriges - nächstes ⏩

ChemSim

Hallo Klaus,

ich habe in meinem Formular frmAnlagenBearbeiten ein Listenfeld lstProdukte eingebaut, welches mit der Tabelle tblProdukte verknüpft ist, um die Produkte auszuwählen, nach denen gefiltert werden soll.

Ebenfalls habe ich im Ereignis "Nach Aktualisierung" den VBA-Code

Private Sub lstProdukte_AfterUpdate()
    Me.Filter = "ProduktID_F = " & Me.lstProdukte
    Me.FilterOn = True
End Sub

eingefügt. Im Listenfeld werden dann auch alle meine Produkte angezeigt. Wähle ich nun ein Produkt aus, so werden mir im Formular auch nur die Anlagen zu dem Produkt angezeigt, allerdings nicht in Tabellenform wie bei einer Abfrage. Ich muss jetzt quasi mit den Buttons "Nächster Datensatz" durch die Ergebnisse klicken, sehe aber nicht alle Anlagen schön übersichtlich in einer Tabelle. Genau aus diesem Grund möchte ich eine Abfrage nutzen!

Ich bin mir auch nicht ganz sicher, wie du meinst, dass dann alle Anlagen zu dem ausgewählten Produkt dargestellt werden, wenn es in dem Formular keine Tabelle etc. gibt und es auch kein Endlosformular ist, weil ich das nicht will!

Gruß
Simon


MzKlMu

#16
Hallo,.
ZitatGenau aus diesem Grund möchte ich eine Abfrage nutzen!
Dazu braucht es keine Abfrage.
Du kannst die Ansicht eines Formulars auf Endlos oder Datenbalttanzeige einstellen. Letzeres sieht aus wie eine Tabelle. Eine Abfrage musst Du auch über ein Formular anzeigen das auch auf diese Eigenschaften eingestellt wird. Du kannst auch völlig problemlos mit dem Klick ins Listenfeld ein extra Formular öffnen das in Datenblattansicht erstellt wurde und den Filterwert über die OpenArgs übergeben. Die direkte Ansicht einer Abfrage (oder Tabelle) ist in Access nicht üblich, braucht man auch nicht.
Gruß Klaus

ChemSim

Hallo,

ZitatDu kannst die Ansicht eines Formulars auf Endlos oder Datenbalttanzeige einstellen.

Wie bereits erwähnt, möchte ich kein Endlosformular habe, da es in meinem Fall kaum übersichtlicher ist als ein einzelnes Formular. Die Datenblattansicht entspricht schon eher meinen Vorstellungen, da diese einer klassischen Tabelle sehr ähnelt. Stelle ich das aktuelle Formular frmAnlagenBearbeiten aber in der "Standardansicht" auf "Datenblatt" um, so sehe ich ja meine ganzen Text- und Kombinationsfelder nicht mehr, auch nicht das Listenfeld. Genau das möchte ich verhindern, da das Formular dazu gedacht ist, neue Anlagen in einer übersichtlichen Darstellungsweise anzulegen (deshalb auch der Name frmAnlagenBearbeiten)

ZitatDu kannst auch völlig problemlos mit dem Klick ins Listenfeld ein extra Formular öffnen das in Datenblattansicht erstellt wurde und den Filterwert über die OpenArgs übergeben.

Das wäre gut. Ich habe das Listenfeld gerade durch ein Kombinationsfeld ersetzt, weil es für mich übersichtlicher ist. Zudem habe ich ein neues Formular frmAnlagen erstellt, dass in der Datenblattansicht geöffnet wird. Wie kann ich jetzt den Filterwert des Kombinationsfeldes im Formular frmAnlagenBearbeiten übergeben, sodass das Formular frmAnlagen in Datenblattansicht geöffnet wird?

Gruß
Simon

MzKlMu

Hallo,
wie gesagt, mit Openargs. Hatten wir nicht schon mal was damit?
Ich weiß im Moment nicht wem ich mit was helfe.  :D

Ich habe im Moment keine Zeit für weitere Erläuterungen.
Später wieder.
Gruß Klaus

MzKlMu

#19
Hallo,
die OpenArgs braucht es gar nicht, da stand ich auf der Leitung.
Den Filter kann man gleich im Open Befehl für das Formulars übergeben.

Im Ereignis "Nach Aktualisierung" des Listen oder Kombifeldes.

DoCmd.Close acForm, "FormularName"
DoCmd.OpenForm "FormularName", acFormDS, , "ProduktID_F = " & Me.lstProdukte
Ob die erste Zeile benötigt wird, musst Du mal testen, ob bei erneuter Auswahl eines Produktes der Filter neu gesetzt wird, oder ob das Formular erst geschlossen werden muss. Was die 1. Zeile dann machen würde. Wenn das Formular bei der ersten Auswahl nicht offen ist, führt der Close Befehl nicht zu einem Fehler. Man kann auch vor dem Öffnen prüfen ob das Formular bereits geöffnet ist, habe ich aber gerade den Code dazu nicht parat.
Gruß Klaus

ChemSim

Hallo,

Ich habe im Ereignis "Nach Aktualisierung" des Kombinationsfeldes cboAnlagenSuchen im Formular frmAnlagenBearbeiten den folgenden Code stehen:

Private Sub cboAnlagenSuchen_AfterUpdate()
    Me.Filter = "ProduktID_F = " & Me.cboAnlagenSuchen
    Me.FilterOn = True
    DoCmd.Close acForm, "frmAnlagenBearbeiten"
    DoCmd.OpenForm "frmAnlagen", acFormDS, , "ProduktID_F = " & Me.cboAnlagenSuchen
End Sub

und bekomme beim Auswahl eines Produktes im Kombinationsfeld den folgenden Fehler:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Was ist falsch?

Gruß
Simon
 

Josef P.

#21
Hallo!

Ich verändere deinen Code nur ein wenig, vielleicht siehst du dann das Problem. (Selber finden hilft meist dauerhaft. ;))
Private Sub cboAnlagenSuchen_AfterUpdate()
    Me.Filter = "ProduktID_F = " & Me.cboAnlagenSuchen
    Me.FilterOn = True
    DoCmd.Close acForm, Me.Name '<-- frmAnlagenBearbeiten ist das Formular, in dem dieser Code ausgeführt wird, oder?
    DoCmd.OpenForm "frmAnlagen", acFormDS, , "ProduktID_F = " & Me.cboAnlagenSuchen
End Sub

Noch etwas (hat nichts mit dem Fehler zu tun):
Warum filterst du das aktuelle Formular um es gleich darauf zu schließen?

Gruß
Josef

MzKlMu

#22
Hallo,
ZitatWas ist falsch?
Alles, das habe ich auch noch nicht mal ansatzweise vorgeschlagen.
Was soll es für einen Sinn machen im Fremdschlüssel zum Produkt nach einer Anlage zu suchen?
Du musst nach einem Produkt suchen (in der Anlagentabelle).
Das Listenfeld zur Produktsuche hat doch schon mal funktioniert. Und darin wird nur dieser Code benötigt.
Private Sub lstProdukte_AfterUpdate()
    DoCmd.OpenForm "frmAnlagen", acFormDS, , "ProduktID_F = " & Me.lstProdukte
End Sub

Später etwas ausführlicher, habe im Moment keine Zeit.


Gruß Klaus

ChemSim

Hallo Klaus,

ZitatAlles, das habe ich auch noch nicht mal ansatzweise vorgeschlagen.

Doch, im Post #19 schreibst du doch:

ZitatIm Ereignis "Nach Aktualisierung" des Listen oder Kombifeldes.

DoCmd.Close acForm, "FormularName"
DoCmd.OpenForm "FormularName", acFormDS, , "ProduktID_F = " & Me.lstProdukte

ZitatDas Listenfeld zur Produktsuche hat doch schon mal funktioniert. Und darin wird nur dieser Code benötigt.

Private Sub lstProdukte_AfterUpdate()
    DoCmd.OpenForm "frmAnlagen", acFormDS, , "ProduktID_F = " & Me.lstProdukte
End Sub

Wie bereits erwähnt, habe ich das Listenfeld lstProdukte mit einem Kombinationsfeld cboAnlagenSuchen ersetzt. Im Ereignis "Nach Aktualisierung" dieses Kombinationsfeldes steht bei mir nun:

Private Sub cboAnlagenSuchen_AfterUpdate()
    DoCmd.OpenForm "frmAnlagen", acFormDS, , "ProduktID_F = " & Me.cboAnlagenSuchen
End Sub

und dieser Code klappt auch und führt zu dem gewünschten Ergebnis!

Gibt es noch eine Möglichkeit, nach Schließen des geöffneten Formulars frmAnlagen (welches in der Datenblattansicht dargestellt wird), das Kombinationsfeld cboAnlagenSuchen wieder zu leeren?

Gruß
Simon


MzKlMu

#24
Hallo,
in #19 habe ich nur die beiden Zeilen vorgeschlagen, aber doch nicht die Zeilen mit dem Filter.

Was mich immer noch irritiert ist das cboAnlagenSuchen. Du suchst doch hier nicht die Anlagen sondern Du suchst ein Produkt und zeigst dann die dazu passenden Anlagen an. Das Kombi cboAnlagenSuchen muss doch als Datenquelle die Produkte haben, sonst passt das ja nicht zu ProduktID_F . Das Kombi solltest Du umbenennen, in 4 Wochen bist auch Du über die Namensgebung irritiert.

Zitat.... das Kombinationsfeld cboAnlagenSuchen wieder zu leeren?
Ja, Du musst Null zuweisen.
Im Ereignis "Beim Schließen" des Formulars frmAnlagen. Aber da muss die vollständige Referenz angewendet werden.

Forms!frmAnlagen.Form!cboAnlagenSuchen = Null
Damit wird die Auswahl des Kombis zurückgesetzt.

Gruß Klaus

ChemSim

Hallo,

ZitatDas Kombi solltest Du umbenennen

Du hast recht, ich habe es zu einem besseren Name umbenannt!

ZitatIm Ereignis "Beim Schließen" des Formulars frmAnlagen. Forms!frmAnlagen.Form!cboAnlagenSuchen = Null

Danke, auch das hat soweit funktioniert!

Gruß
Simon