Problem mit Zuordnung: Access Formulare - Datensätze über Kombobox selektieren und in Endlosformular ausgeben
Hallo allerseits,
Ich brauche dringend Hilfe :(
Ich mache derzeit einen Ferienjob in dem ich eine Access DB mit Formularen erstellen muss.
Die Datenstruktur selber und die Abfragen stellen kein Problem dar, aber mit den Formularen komm ich leider garnicht klar.
An folgendem Problem sitze ich jetzt schon 1 1/2 tage und am Freitag ist der Abgabetermin :(
Ziel dieses Formulars ist es aus einer KomboBox einen Wert auszuwählen, den ich jetzt aus einer Tabelle auslese.
Dieser Rückgabewert (der ausgewählte Wert) soll dann wiederrum Teil einer Abfrage über 4 Tabellen sein, sodass eben nur die Werte dieser Auswahl in einem Endlosformular ausgegeben werden.
Die Abfrage selber funktioniert, jedoch weiß ich nicht wie ich den ausgewählten Wert an die andere Abfrage übergeben soll bzw. wie dieser Teil der Abfrage wird.
Als Steuerelementinhalt der KomboBox hab' ich den entsprechenden Wert der auszuführenden Angabe eingegeben, wie ich es in diversen Anleitungen gefunden hab.
Will ich jedoch einen Wert in der KomboBox auswählen ist dieser nicht selektierbar. In der Statusleiste von Access taucht die Meldung "Das Steuerelement kann nicht bearbeitet werden; es ist an den Wert [txtMArt_Bez] gebunden"
Ich weiß echt nichtmehr weiter, ich werd noch wahnsinnig. Bitte helft mir :(
Antwort schreiben
Antwort 1 von Teddy7 vom 22.08.2019, 16:02 Options
Das Kombifeld muß natürlich ungebunden sein.
In der Abfrage, die dann als Datenquelle für das Endlosformular dient, schreibst Du als Kriterium einen Verweis auf dieses Kombifeld:
Formulare!DeinFormularname!DeinKombifeldname
Das klappt aber nur wenn das Formular mit dem Kombifeld geöffnet ist. Ist das nicht so, dann kannst Du den Wert des Kombifeldes in eine globale Variable bringen, über diese globale Variable eine globale function machen und diese function dann in der Abfrage als Kriterium verwenden.
ODER du gibst den Selektionswert beim Öffnen des Endlosformulars mit:
Wenn Du z.B. ein Befehlsfeld hast, mit dem Du das Endlosformular öffnest, dann kannst Du im klick-Ereignis diesen Code hinterlegen:
dim suche as string
suche = "DeinFeldname = " & DeinKombifeldname
DoCmd.OpenForm "frmÜbersicht", acNormal, , suche, , acFormPropertySettings
' DeinFeldname ist der Feldname in der Abfrage, dessen Werte eingeschränkt werden sollen.
' Ist das ein Textfeld, so muß der Wert des Kombifeldes in Hochkommas übergeben werden:
' suche = "DeinFeldname = " & "'" & DeinKombifeldname & "'"
Gruß
Teddy
Antwort 2 von Dethix vom 22.08.2019, 16:42 Options
Wieder mal Antwort in einer Wahnsinnsgeschwindigkeit! Tausend Dank Teddy!
Den wert als Funktion zurückzugeben hatte ich davor auch schon probiert, allerdings hat VBA mein Modul mit der bzw. den Funktionen nicht gefunden.
Auch die Kombibox als Kriterium in der zugrundeliegenden Abfrage einzugeben habe ich bereits ausprobiert.
Jetzt scheint es aber zu funktionieren, zumindest wenn ich das entsprechende in der KombiBox auswähl und dann die Abfrage direkt starte: Die entsprechenden Daten werden in der "Datenblattansicht" korrekt angezeigt.
Im Formular selber tauchen sie jedoch nicht auf...
Muss das Unterformular vielleicht nur "refreshed" werden ?
Habs mal mit einem Me.Refresh und einem <unterformularname>.requery probiert ... leider ohne Erfolg
Hab ich noch irgendwas vergessen ?
Danke nochmal!!
Antwort 3 von erik vom 22.08.2019, 17:19 Options
Hallo Dethix,
ich habe das so verstanden, dass du eine Haupt-/Unterformular-Kombination hast. Im Hauptformular befindet sich das Kombinationsfeld und im Unterformular willst du Datensätze abhängig vom Inhalt des Kombinationsfeldes anzeigen.
Wenn das so stimmt, dann ist das hier die einfachste Lösung:
Wenn du das Unterformular in das Hauptformular hineingezogen hast, dann kennt der Unterformular-Container zwei Eigenschaften: "Verknüpfen von" und "Verknüpfen nach". Um das zu finden, darfst du nur *einmal* in den Unterformular-Container klicken, ansonsten bekommst du die Eigenschaften des Unterformulars.
In die Eigenschaft "Verknüpfen von" trägst du den Namen des Feldes aus der Abfrage ein, das du für die Filterung über das Kombinationsfeld heranziehen wolltest.
In die Eigenschaft "Verknüpfen nach" trägst du den Namen des Kombinationsfeldes ein.
Die Abfrage selbst benötigt keine weiteren Filter mehr, jedenfalls keine, die sich bisher auf das Kombinationsfeld beziehen sollten.
Wenn du das Formular jetzt normal öffnest, dann wird der Wert des Kombinationsfeldes automatisch über die beiden Verknüpfungseigenschaften ins Unterformular geleitet und dort entsprechend gefiltert.
Das ist eigentlich alles, im Prinzip die Standard-Vorgehensweise beim Verknüpfen von Haupt- und Unterformularen.
Viele Grüße
erik
Antwort 4 von Teddy7 vom 23.08.2019, 08:54 Options
Wenn Du mit function arbeitest, dann muß es eine globale sein.
D.h. es wird eine Variable im Modul1 definiert mit
Public ppFeld1 as string
Und eine globale function mit
public function fppFeld1() as string
fppfeld1 = ppfeld1
end function
Ich nutze aber eher die Möglichkeit, die Selektionskriterien beim Öffnen des Formulars mitzugeben. Da ist dann günstiger, wenn man mehrere Kriterien hat, von denen nicht immer alle zu setzen sind (also auch mal ein Kriterium nicht gefüllt und damit nicht abzufragen ist).
Wenn es sich bei Dir um Haupt- und Unterformular handelt, dann fehlt wahrscheinlich noch der Me. requery - Befehl.
Gruß
Teddy
Antwort 5 von Dethix vom 23.08.2019, 09:02 Options
Hi erik!
Du hast genau richtig verstanden :)
Danke für die ausführliche Antwort!
So funktionierts erstmal... Gut zu wissen dass das das Standardverfahren ist
Lassen sich damit aber auch mehrere Werte i.d. Abfrage abdecken ?
Nach einem Datum sollte der Datensatz nämlich auch noch sortierbar sein ... :)