Suchformular für Film-Datenbank!

Hallo zusammen

Dies ist mein erster Eintrag bzw. meine erste Anfrage hier, hoffentlich kann mir jemand helfen :smile:

Da mich alle im Internet auffindbaren Lösungen nicht ansprachen, wollte ich eine eigene kleine Datenbank für meine Filme anlegen; dies in Access 2007. Die Tabelle an sich sowie das Formular, um Filmdetails anzuzeigen, sind mir bereits gelungen.
Nun möchte ich ein Formular erstellen, welches mich nach einem oder mehreren Kriterien in der Film-Tabelle suchen lässt. Ich stelle mir das so vor, dass oben im Formular Text- bzw. Kombofelder zur Auswahl der Kriterien sind, und untem im Feld ein Listenfeld, welches zunächst alle Datensätze anzeigt und nach Ausfüllen der gewünschten Kriterien und dem Drücken eines Suchen-Buttons nur noch die gesuchten Datensätze anzeigt. Ausserdem hätte ich gerne, dass die eingegeben Strings auch in String-Sätzen drin gesucht werden (z.B. die Eingabe „Held“ findet die Filme „Held“ sowie auch „Der Held von Berlin“). Ausserdem möchte ich erreichen, dass ein Doppelklick auf einen bestimmten Titel im Listenfeld das Detailformular (welches ich oben kurz angesprochen habe) mit diesem Datensatz öffnet.

Ich habe schon ein Access Buch sowie das Internet konsultiert aber nie etwas vernünftiges gefunden. Kann mir jemand helfen?

Parameter:
Tabelle: „Filme“
Felder: „MID“ (Film-ID, PrimaryKey), „Titel“, „Jahr“, „Genre“ (DropDown Menü), „Jahr“ (Zahl), „Länge“ (Zeitfeld), „Festplatte“ (Dropdown, auf welcher Festplatte befindet sich der Film"), „Rating“ (DropDown, 1 bis 5 Sterne)

Vielen Dank!

Gruss
Thomas

Hallo Thomas

Dies ist mein erster Eintrag bzw. meine erste Anfrage hier,
hoffentlich kann mir jemand helfen :smile:

erstmal HERZLICH WILLKOMMEN

Ich habe schon ein Access Buch sowie das Internet konsultiert
aber nie etwas vernünftiges gefunden. Kann mir jemand helfen?

erstmal solltest du hier die FAQs lesen, dort gibt es auch ein Beispiel für ein (Dropdown)Pulldown-Feld zur Suche.

Weiterhin empfehle ich dir diese Webseite:
http://www.add-in-world.com/katalog/#access

Dort gibt es ein kostenloses eBook zum Thema Suchen.

Parameter:
Tabelle: „Filme“
Felder: „MID“ (Film-ID, PrimaryKey),

BTW: MID ist eine Accessfunktion und sollte nie als Feldbezeichnung verwendet werden!!

„Titel“, „Jahr“, „Genre“
(DropDown Menü), „Jahr“ (Zahl), „Länge“ (Zeitfeld),
„Festplatte“ (Dropdown, auf welcher Festplatte befindet sich
der Film"), „Rating“ (DropDown, 1 bis 5 Sterne)

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang

Vielen Dank für die Antwort.

Das eBook habe ich mir noch nicht angeschaut, die FAQ jedoch schon. Ich fürchte allmählich, mein Verständnis fehlt so sehr dass man mir alles „vorkauen“ muss. :frowning:

Gäbe es für Dich eine Möglichkeit, mir codeschnipselmässig eine kleine Anleitung zu geben? Die Parameter kennst Du ja (Ausser MID, das heisst jetzt MovieID, danke für den Tipp), alles soll in einem Listenfeld platziert werden…

Ich finde immer nur Lösungen für Dropdownfelder, was mir nicht so gefällt.

Danke für Deine Hilfe!

Gruss aus Zürich
Thomas

Hallo, Thomas!

Nun möchte ich ein Formular erstellen, welches mich nach einem
oder mehreren Kriterien in der Film-Tabelle suchen lässt. Ich
stelle mir das so vor, dass oben im Formular Text- bzw.
Kombofelder zur Auswahl der Kriterien sind, und untem im Feld
ein Listenfeld, welches zunächst alle Datensätze anzeigt und
nach Ausfüllen der gewünschten Kriterien und dem Drücken eines
Suchen-Buttons nur noch die gesuchten Datensätze anzeigt.

Das würde ich wie folgt machen: Entweder nimmst Du zur Anzeige der Treffermenge eine Liste, oder Du nimmst gleich ein Endlosformular. Das finde ich schicker, weil ich die Suche dann wie folgt realisieren würde:

Im Detailbereich zeigst Du die ganzen Felder an. Ich würde annehmen, dass nach genau diesen auch gesucht werden soll. Dann machst Du Dir für jedes Feld im Detailbereich ein passendes als Filterkriterium im Formularkopf oder -fuß, je nachdem, wo Du lieber suchen möchtest (oben oder unten).

Ggf. machst Du in den Suchbereich noch ein Optionsfeld rein, in dem Du definieren kannst, ob Du die einzelnen Eingaben mit UND oder mit ODER verknüpfen möchtest.

Dann schreibst Du in dem Formular eine Sub, die z. B. „FilterSetzen“ heißt. Hier fragst Du jedes Feld aus Deiner Suchmaske ab, ob etwas eingetragen wurde. Wenn ja, bastelst Du Dir das entsprechende Kriterium auf dem entsprechenden Datenbank-Feld zusammen. Für Texteingaben sollte dass dann so heißen:

DeinFeld LIKE ‚**‘

damit eben auch diese „enthält“-Option geprüft wird. Nach dem Zusammenbau des Filterkriteriums weist Du dieses der Filter-Eigenschaft zu.

Diese FilterSetzen-Routine rufst Du entweder über eine separate Schaltfläche auf oder im AfterUpdate-Ereignis der Filter-Felder (oder sogar im KeyPress-/KeyDown-Ereignis, wenn es die Performance zulässt, dass die Treffermenge nach jedem Tastendruck aktualisiert werden kann:wink:.

Ach ja, warum Endlosformular: Die Filtereingabefelder und die Anzeigefelder sind gleich breit und übereinander, somit ist klar, was man wo eingibt zum Filtern, und wenn ich das Formular verkleinere oder breiter mache, habe ich keine Probleme mit dem Scrollen…

Für den Aufruf des Detailformulars wertest Du dann ganz einfach das DoubleClick-Ereignis aller Textfelder im Detailbereich sowie das DoubleClick im Detailbereich selbst aus und rufst das Detailformular auf.

Gruß, Manfred

Hallo Manfred!

Wow, gleich eine direkte Lösung, super, danke!

Nur eines verstehe ich nicht ganz: Wofür soll ich im Formularkopf Textfelder machen? Mir ist nicht klar, was diese genau für eine Funktion haben.

Das mit dem Endlosformular scheint ideal, nur: Wie macht man so eins?

Oder habe ich Dich falsch verstanden?

Danke!

Gruss
Thomas

Hallo, Thomas!

Nur eines verstehe ich nicht ganz: Wofür soll ich im
Formularkopf Textfelder machen? Mir ist nicht klar, was diese
genau für eine Funktion haben.

Du hast im Formularkopf Textfelder, in die Du Deine Suchkriterien eintragen kannst. Im sich wiederholenden Endlosformular stehen dann die Ergebnisse passend zum Filter. Das sieht dann ungefähr so aus:

Filmtitel Jahr
[held] [] 
--------------------------------------
[Der Held von Berlin] [1999]
[Robin Hood-Helden i] [2000]

Mit den eckigen Klammern habe ich mal die Textfelder markiert. Das Ding oberhalb von der Linie findet sich im Formularkopf, die Auflistung im Detailbereich.

Das mit dem Endlosformular scheint ideal, nur: Wie macht man
so eins?

Völlig easy: Stell die Eigenschaft „Standardansicht“ des Formulars auf „Endlosformular“. Dann wird alles das, was im „Detailbereich“ steht, für jeden Datensatz wiederholt. Formularkopf und -fuß dagegen finden sich nur ein Mal, oben und unten vom Formular.

Gruß, Manfred

Hallo Thomas,

Das eBook habe ich mir noch nicht angeschaut, die FAQ jedoch
schon. Ich fürchte allmählich, mein Verständnis fehlt so sehr
dass man mir alles „vorkauen“ muss. :frowning:

wir haben alle mal angefangen :smile:
In der Symbolleiste bzw. im Ribbon findest du die Suchfunktion von Access (Symbol=Fernglas). Damit kannst du in deiner Datenbank suchen, ohne etwas programmieren zu müssen.

Gäbe es für Dich eine Möglichkeit, mir codeschnipselmässig
eine kleine Anleitung zu geben?

ähm, und wie gut kennst du dich mit VBA aus? Könntest du die Code-Schnipsel auch „einbauen“ bzw. das Geschriebene umsetzen?

Die Parameter kennst Du ja
(Ausser MID, das heisst jetzt MovieID, danke für den Tipp),
alles soll in einem Listenfeld platziert werden…

wie Manfred schon richtig sagte: ein Endlosformular mit Suchfeldern im Kopf wäre da auf jeden Fall besser als ein Listenfeld.

Ich finde immer nur Lösungen für Dropdownfelder, was mir nicht
so gefällt.

kommt immer auf die Suchanfrage an … du mußt nach FILTER und NICHT nach SUCHEN im I-Net suchen!

also ein wenig Code, mal so als Beispiel:

Dim MyFilter
MyFilter = „[TITEL]= '*“ & Me.SucheTITEL & „*’ " & Me.ORand1 & " [Jahr] = " & Me.SucheJAHR & " " & Me.ORand2 & " [Genre] = '*“ & Me.SucheGENRE & „*’“

Me.Filter= MyFilter
Me.FilterON = True

Alles klar? :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Manfred

wir haben alle mal angefangen :smile:
In der Symbolleiste bzw. im Ribbon findest du die Suchfunktion
von Access (Symbol=Fernglas). Damit kannst du in deiner
Datenbank suchen, ohne etwas programmieren zu müssen.

Ich möchte die DB am Ende in eine Runtime ausgeben, sodass ich das System standalone benutzen kann. Daher ist diese Lösung leider nicht passend für mich.

ähm, und wie gut kennst du dich mit VBA aus? Könntest du die
Code-Schnipsel auch „einbauen“ bzw. das Geschriebene umsetzen?

Schon ein bisschen … habe früher in BASIC programmiert, ein kleines bisschen C und PHP, also so ein wenig Ahnung habe ich schon :smile:

wie Manfred schon richtig sagte: ein Endlosformular mit
Suchfeldern im Kopf wäre da auf jeden Fall besser als ein
Listenfeld.

Okay, aber leider sagt mir „Endlosformular“ nichts und der Sinn hinter Suchfeldern im Kopf ist mir leider auch nicht klar :frowning:

kommt immer auf die Suchanfrage an … du mußt nach FILTER und
NICHT nach SUCHEN im I-Net suchen!

)
also ein wenig Code, mal so als Beispiel:

Dim MyFilter
MyFilter = „[TITEL]= '*“ & Me.SucheTITEL & „*’ " & Me.ORand1 &
" [Jahr] = " & Me.SucheJAHR & " " & Me.ORand2 & " [Genre] =
'*“ & Me.SucheGENRE & „*’“

Me.Filter= MyFilter
Me.FilterON = True

Alles klar? :smile:

Soweit ja, danke, aber Code dieses Typs habe ich auch schon angewandt … einmal hat das Filtern sogar geklappt, aber eben leider trotz Sternchen und ’ und alles nie so wie ich wollte …
Irgendwo stecke ich total fest.
Wie genau funktioniert denn das System mit den Feldern im Kopf?
Und was genau ist ein Endlosformular und wie erstelle ich es?

Vielen Dank für die Geduld! :smile:

Gruss aus Zürich
Thomas

Hallo, Thomas!

Hallo Manfred

Das war netwolf, der Dir geschrieben hat:wink:

Ich hab’ Dir mal schnell was zusammengezimmert und gemailt.

Gruß, Manfred