Oktober 22, 2021, 22:20:52

Neuigkeiten:

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


Parameterabfrage von "Fremdformular"

Begonnen von steho80, Oktober 11, 2021, 22:33:18

⏪ vorheriges - nächstes ⏩

steho80

Hallo liebe Community,

ich bin gerade dabei mir anhand einer konkreten Aufgabenstellung Access beizubringen. Nach ersten Anlaufschwierigkeiten zum Aufbau der DB und euren Hinweisen habe ich mir anhand eine einfachen Beispiels (basierend auf einem Beispiel aus einem Tutorial mit F1 Teams) erstmal die grundsätzliche einfache Umsetzung für meine DB überlegt und versuche das umzusetzen. Dabei ist mir jetzt ein Problem untergekommen, bei dem ich nicht so richtig weiß, warum es auftritt.
In der DB im Anhang findet ihr eine Form "frmFahrerEingabe". Dort gibt es Checkboxen die für jeden F1 Fahrer Ausrüstungsgegenstände festlegen (Helm, Handschuhe...etc). In einer Form "frmFahrerSuche" soll nun ein Filter gesetzt werden, der anhand der checkboxen die entsprechenden Ergebnisse zeigt. Da in meiner späteren realen Datenbank allerhand checkboxen auftauchen werden, habe ich mir überlegt die Filterauswahl auf ein separates Formular "frmSuchFilter" zu legen (um die eigentliche Suchform nicht zu überfrachten), dass man dann öffnen kann um die Filter zu setzen. Das funktioniert auch exemplarisch alles soweit wie es soll, allerdings erwartet Access jedesmal beim öffnen der Form "frmFahrerSuche" von mir einen Parameterwert der Parameter aus "frmSuchFilter" einzugeben. Ich weiß nicht ob und wie man das unterdrücken kann / muss. Accessversion ist Access 2013, die DB findet ihr gepackt im Anhang.

Vielen herzlichen Dank für Eure Hilfe im Voraus.

Gruß steho80

steho80

Oktober 11, 2021, 23:42:44 #1 Letzte Bearbeitung: Oktober 11, 2021, 23:49:05 von steho80
Ich habe jetzt  herausgefunden, dass die Parameterabfrage nicht erscheint, wenn die Form "frmSuchFilter" bereits geöffnet ist. Daher habe ich "Beim Anzeigen" der Form "frm_FahrerSuche" folgendes gesetzt:

Private Sub Form_Current()
    DoCmd.OpenForm "frmSuchFilter"
    Form_frmSuchFilter.Visible = False
End Sub

Funktioniert auch, allerdings treten jetzt zwei andere Effekte auf:

1.) die Aufforderung der Parameterabfrage erscheint erst NICHT beim zweiten mal Aufrufen der Form "frmFahrerSuche"!
2.) Das "Fremdformular" "frmSuchFilter" wird bei jedem ändern der Checkboxeinstellung geschlossen und muss neu geöffnet werden!

Gibt es andere Lösungsmöglichkeiten?!

Gruß und Danke

steho80

DF6GL

Oktober 12, 2021, 09:08:16 #2 Letzte Bearbeitung: Oktober 12, 2021, 09:32:04 von DF6GL
Hallo,

wenn Verweise auf FormularSteuerelemente in Abfragekriterien (und ansonsten auch) verwendet werden, muss das das entspr. Form geöffnet sein. Wenn das Form geschlossen ist, existiert das Steuerelement ja nicht.  Grundsätzlich funktionieren solche Referenzen zwar, sind aber stark fehlerbehaftet, wenn man nicht aufpasst. Somit ist das Verhalten "richtig" und "normal"


Auch das Öffnen des Forms jedes Mal beim Ereignis "Form_Current" ist nicht zu empfehlen.



ZitatDa in meiner späteren realen Datenbank allerhand checkboxen auftauchen werden, habe ich mir überlegt die Filterauswahl auf ein separates Formular "frmSuchFilter" zu legen (um die eigentliche Suchform nicht zu überfrachten)

Möglicherwweise sind "allerhand" Checkboxen nicht die geeignete Wahl. Überlege, ob vielleicht später nicht noch weitere Auswahl-Punkte hinzukommen, dann müsste jedes Mal die DB (das Filter-Form) geändert werden.

Andere Möglichkeiten gibt es natürlich, z. B. das Filtern des geladenen Form-Recordsets mit der "Filter"-Methode:

1)
.
.
Me.Filter = "Fahrer_ID = " & Me!cmbFahrer    'Kombi "cmbFahrer" zeigt alle Fahrer an, mit der Fahrer_ID in der ersten Spalte
Me.FilterOn = true
.
.
2) 
zusammensetzen des SQL-Strings mit der Where-Condition  per VBA für das Anzeigeform

Me.Recordsource = "Select * From tblFahrer Where Fahrer_ID = " & Me!cmbFahrer & " Order by FahrerName"
3)
 Nutzen des Parameters-Abschnitts in der Form-Abfrage
.
.






Das Argument der Formular-Überfrachtung sehe ich nicht als stichhaltig an.  Wenn es denn ein Suchform sein soll, dann erledige alles, was mit der Suche zusammenhängt, auch in diesem einen Form.


btw:  Verzichte auf Sonder- und Leerzeichen  in eigenerstellten Namen.  Verwende konsistente Namensgebung und erstelle für jede Tabelle ein dediziertes Formular. Z. B. für Tabelle "tblFahrer"  ---> "frmFahrer"


Der Zusatz  "ufrm" ist nur sinnvoll, wenn damit genau daruf hingewiesen werden soll, dass das Form nur für die Anzeige mit einem Ufo-Steuerelement entwickelt ist.

Benenne Primärschlüssel-Felder z. B. so:  "Fahrer_ID" in tblFahrer   und das/die entspr. Fremdschlüsselfeld/er  "Fahrer_ID_f"  .

MzKlMu

Oktober 12, 2021, 09:44:18 #3 Letzte Bearbeitung: Oktober 12, 2021, 17:47:50 von MzKlMu
Hallo,
der Aufbau mit den Ja/Nein Feldern ist für eine Datenbank falsch (wie von Franz schon angemerkt).
Hier ist eine klassische n:m Beziehung mit 3 Tabellen aufzubauen.

Siehe hierzu:
http://allenbrowne.com/casu-23.html

Außerdem sind die Nachschlagefelder in den Tabellen zu entfernen, bzw. sind normale Textfelder zu verwenden. Nachschlagefelder sind nur in Formularen (=Kombinationsfelder) sinnvoll.

Die DB bedarf der Überarbeitung.
Gruß
Klaus

steho80

Hallo und wieder vielen Dank für die Hinweise!

Ich werde diese im einzelnen Durchgehen und versuchen zu berücksichtigen!

Darüber hinaus bin ich ehrlich gesagt immer mehr (im negativen Sinne) erstaunt, dass ich viele der Hinweise von euch so in jeglicher der (Standard-)Literatur die ich mir über Access zugelegt habe im Detail vermisse(n muss). Das was man da so in Eigenregie (mit Hilfe) als Anfänger zusammenbastelt funktioniert ja zumindest meist so (und die Software lässt es ja auch zu), dass man nicht zwangsläufig auf die Idee kommt, dass das verkehrt ist!

Vielen Dank!

steho80

ebs17

Mit freundlichem Glück Auf!

Eberhard