Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ChemSim am Februar 25, 2024, 21:08:28

Titel: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 25, 2024, 21:08:28
Hallo,

in meiner Datenbank gibt es eine Tabelle tblAnlagen, in der die Produktionsanlagen von mehreren Unternehmen mit dem Produkt, Standort und der produzierten Menge gelistet sind. Da die Tabelle die Anlagen zu mehreren Produkten enthält, habe ich mir einige einfache Abfragen erstellt, die die gewünschten Spalten anzeigen, dabei jedoch nach einem bestimmten Produkt (qryProdukt1, qryProdukt2, etc.) filtern, sodass mir alle Anlagen mit diesem Produkt angezeigt werden.

Zur Steuerung der Datenbank benutze ich ein ungebundenes Formular als Navigationsseite. Ist es möglich, auf diesem Formular eine Suchfunktion einzubauen, mit der ich dann die Abfragen zu den einzelnen Produkten schnell aufrufen kann? Dazu müsste quasi dieses Such- / Kombinationsfeld mit den Abfragen verknüpft werden und wenn ich in das Suchfeld beispielsweise "Produkt 1" eingebe, möchte ich zur Abfrage qryProdukt1 weitergeleitet werden.

Ist so etwas möglich? Würde mich über Hilfe und Vorschläge freuen!

Viele Grüße
Simon
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: andyfau am Februar 25, 2024, 23:28:37
Hallo,
du kannst im Kriterienfeld der Abfrage direkt das ungebundene Feld aus dem Formular nutzen.

Formulare![Formularname]![Feldname]
Dabei muss das Formular zum Zeitpunkt des Aufrufs der Abfrage geöffnet sein. Also baust Du im Formular am besten auch einen Button zum Start der Abfrage ein.

Viele Grüße
Andreas
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: Beaker s.a. am Februar 26, 2024, 16:37:29
Hallo Simon,

Unterscheiden sich die einzelnen Abfragen nur durch das Kriterium "Produkt"
oder sind die von Produkt zu Produkt unterschiedlich?
Wenn ersteres zutrifft brauchst du doch nur eine einzige Abfrage. Die öffnest
du dann mit Übergabe der Produkt-Nr. zur Filterung.
Und, wenn du schon auf deinem Steuerungsform eine Suche nach einem Produkt
starten willst, frage ich mich warum dann nicht gleich ein Formular zur
Produktverwaltung öffnest, gefiltert auf die eingegebene Produkt-Nr.

gruss ekkehard
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 18:44:09
Hallo Andreas,

Zitatdu kannst im Kriterienfeld der Abfrage direkt das ungebundene Feld aus dem Formular nutzen.

Als ungebundenes Formular nutze ich das Formular frmDashboard. Dort habe ich ein ungebundenes Kombinationsfeld mit dem Namen cboAnlagen erstellt. In der Abfrage qryProdukt1 habe ich dann in der Spalte "Produktname" in der Zeile "Kriterien" den Code

[Formulare]![frmDashboard]![cboAnlagen]

eingegeben. Leider hat es nicht funktioniert und ich kann im Kombinationsfeld auf dem Formular frmDashboard kein Produkt auswählen, obwohl sowohl das Formular als auch die Abfrage geöffnet sind.

Viele Grüße
Simon
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 18:49:25
Hallo Ekkehard,

ZitatUnterscheiden sich die einzelnen Abfragen nur durch das Kriterium "Produkt"

Richtig, die einzelnen Abfragen unterscheiden sich nur durch das Kriterium "Produkt", alle anderen Spalten der Abfrage sollen gleich bleiben. Vielleicht sollte ich erwähnen, dass die Tabelle tblAnlagen mit der Tabelle tblProdukte verknüpft ist, sodass eine Fremdschlüsselbeziehung zwischen den beiden Tabelle besteht und im Feld "Produktname" nur die Fremdschlüssel-ID steht.

ZitatWenn ersteres zutrifft brauchst du doch nur eine einzige Abfrage. Die öffnest du dann mit Übergabe der Produkt-Nr. zur Filterung.

Wie genau meinst du das bzw. wie kann ich das realisieren?

Zitatwarum dann nicht gleich ein Formular zur Produktverwaltung öffnest, gefiltert auf die eingegebene Produkt-Nr.

Ich habe ein Formular frmProdukteBearbeiten, dass dazu genutzt wird, neue Datensätze ich die Tabelle tblProdukte einzutragen.

Viele Grüße
Simon
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 26, 2024, 19:24:55
Hallo,
ZitatIch habe ein Formular frmProdukteBearbeiten, dass dazu genutzt wird, neue Datensätze ich die Tabelle tblProdukte einzutragen.
Warum nutzt Du dieses Formular nicht auch zur Suche ?
Das kann mit einem Kombifeld erfolgen das alle Produkte zur Suche anzeigt.
Oder Du erstellst ein Listenfeld das nur die Produkte zeigt und per Klick das Formular frmProdukteBearbeiten auf das gewünschte Produkt positioniert. Das ist doch viel einfacher und übersichtlicher (und logischer vom Ablauf) als das Suchfeld auf dem Dashboard.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: andyfau am Februar 26, 2024, 19:34:04
Zitat von: ChemSim am Februar 26, 2024, 18:44:09Dort habe ich ein ungebundenes Kombinationsfeld mit dem Namen cboAnlagen erstellt.

Wie sehen denn die Eigenschaften des ungebundenen Kombifeldes aus? (Datenherkunft, gebundene Spalte) Steht dann VOR Öffnen der Abfrage ein gültiger Produktname im Kombifeld?

Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 20:00:22
ZitatWie sehen denn die Eigenschaften des ungebundenen Kombifeldes aus? (Datenherkunft, gebundene Spalte)

Naja, wie der Name schon sagt ist das Kombinationsfeld ungebunden und hat somit keine Datenherkunft. Gebundene Spalten habe ich aktuell auf 1 stehen.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 20:03:47
Hallo Klaus,

ZitatWarum nutzt Du dieses Formular nicht auch zur Suche?

Ich möchte ja nicht innerhalb der Tabelle tblProdukte suchen, sondern in der Tabelle tblAnlagen. Es soll nur per Abfrage ein Produkt ausgewählt werden und dazu alle Anlagen angezeigt werden.

ZitatOder Du erstellst ein Listenfeld das nur die Produkte zeigt und per Klick das Formular frmProdukteBearbeiten auf das gewünschte Produkt positioniert.

Auch hier, es geht nicht um die Tabelle tblProdukte

Gruß
Simon

Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 26, 2024, 20:07:10
Hallo,
ZitatEs soll nur per Abfrage ein Produkt ausgewählt werden und dazu alle Anlagen angezeigt werden.
Und aus welcher Tabelle wählst Du das Produkt ? Produkt und Anlagen müssen doch in Beziehung stehen.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 20:14:11
In meiner Tabelle tblAnlagen habe ich alle anderen Tabellen meiner Datenbank per Fremdschlüssel verknüpft und nun möchte ich in einer Abfrage die ausgewählten Spalten anzeigen und dabei nach dem Produktnamen filtern. Dazu habe ich diese Abfrage erstellt. Wenn ich diese ausführe, werden mir aber keine Einträge in der Abfrage angezeigt, obwohl es letztens noch funktioniert hat:

#1.png

Wo liegt der Fehler?
Zitat von: MzKlMu am Februar 26, 2024, 20:07:10Hallo,
ZitatEs soll nur per Abfrage ein Produkt ausgewählt werden und dazu alle Anlagen angezeigt werden.
Und aus welcher Tabelle wählst Du das Produkt ? Produkt und Anlagen müssen doch in Beziehung stehen.
Das Produkt wird aus der Tabelle tblProdukte ausgewählt!



Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 20:21:01
ZitatWenn ich diese ausführe, werden mir aber keine Einträge in der Abfrage angezeigt, obwohl es letztens noch funktioniert hat

Ich habe gerade bemerkt, dass nur dann keine Einträge in der Abfrage erscheinen, wenn ich ein Fremdschlüsselfeld leer lasse. Kann das irgendwie umgestellt werden?
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: andyfau am Februar 26, 2024, 20:56:50
Na das Kombinationsfeld muss doch eine Datenherkunft (z.B. eine Abfrage die alle Produktnamen aus deiner Tabelle selektiert) haben, damit man überhaupt einen Wert auswählen kann.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 26, 2024, 21:04:36
Also muss ich eine neue Abfrage erstellen, die nur die Produktnamen aus der Tabelle tblProdukte anzeigt?
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 27, 2024, 00:08:30
Hallo,
Du denkst zu kompliziert. Du willst auch immer Abfragen. Du brauchst hier keine speziellen Abfragen. Und selbst wenn, Abfragen zeigt man in Access nicht direkt an, sondern immer über ein Formular. Und das Formular zum Bearbeiten der Anlagen hast Du ja schon. Und in diesem Formular solltest Du auch das Suchen realisieren. Im Dashboard hat ein solches Suchfeld nichts verloren. Ein solches Dashboard dient der Steuerung der Datenbank.

Lege im Formular zur Bearbeitung der Anlagen ein Listenfeld an in dem die Produkte gezeigt werden.
Mit diesem Listenfeld filterst Du das Formular (bzw. dessen Datenherkunft).
Das gibt exakt 2 Zeilen VBA Code im Ereignis "Nach Aktualisierung" des Listenfeldes.

Me.Filter = "ProduktID_F = " & Me.NameListenfeld
Me.FilterOn = True
Gefiltert wird immer über die ID, nicht über den Text. Wie das geht mit den Spalten und den Spaltenbreiten hast Du ja schon über Kombifelder gelernt.

Per Button lässt sich der Filter auch wieder löschen.

Me.Filter = ""
Me.FilterOn = False

Mit etwas mehr VBA Code kann man in die Abfrage noch <Alle> integrieren und braucht dann den Button nicht mehr.
Aus Platzgründen kann man statt des Listenfeldes auch ein Kombifeld verwenden, das funktioniert genau so.

Damit hast Du alles was Du brauchst, sehr einfach und in einem gewohnten Formular.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 27, 2024, 19:15:49
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

Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 27, 2024, 19:27:59
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.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 27, 2024, 19:58:01
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
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 27, 2024, 20:06:13
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.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 28, 2024, 00:15:54
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.
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 28, 2024, 05:52:22
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:

Fehler.png

Was ist falsch?

Gruß
Simon
 
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: Josef P. am Februar 28, 2024, 08:44:03
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
Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 28, 2024, 09:26:08
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.


Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 28, 2024, 18:29:27
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

Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: MzKlMu am Februar 28, 2024, 18:53:25
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.

Titel: Re: Abfrage mit Suchfeld auf Formular verbinden
Beitrag von: ChemSim am Februar 28, 2024, 19:21:41
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