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
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
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
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
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
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.
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?
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.
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
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.
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!
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?
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.
Also muss ich eine neue Abfrage erstellen, die nur die Produktnamen aus der Tabelle tblProdukte anzeigt?
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.
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
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.
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
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.
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.
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
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
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.
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
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.
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