Hallo,
in einem Formular gibt es Datensätze zu verschiedenen Audiotiteln.
Das erste Feld eines Datensatzes lautet ,,Titel", das letzte Feld eines Datensatzes ist ein Ja/Nein-Feld und lautet ,,Suchen".
Ich möchte nun erreichen, dass ich bei einem Datensatz, bei dem ich bei ,,Suchen" einen Haken setze und danach auf eine Befehlsschaltfläche klicke, der Titel dieses Datensatzes ausgelesen wird.
Der Zweck ist, dass ich in einem anderen Formular diesen Titel als Suchkrietrium benötige um zu dem entprechenden Datensatz zu springen.
Wie ich das mit der Parameterübergabe in das neue Formular hinkriege (Übergabe mit OpenArgs) habe ich bereits an einem Testformular ausprobiert. Das sollte ich schaffen. Auch wie ich dann in dem zweiten Formular zu dem entsprechenden Datensatz springe, kriege ich hin.
Nur wie ich den Inhalt des Titelfeldes auslese, bei dem ich im Suchen-Feld einen Haken gesetzt habe, ist mir noch nicht klar.
Die Suche im Internet mit ,,Textfeld in Formular auslesen" brachte mich hier leider nicht weiter.
Vorab schon mal vielen Dank.
Gruß,
Ralf26
Hallo,
so ganz verständlich ist mir diese Suche nicht...
Vielleicht brauchst Du ja sowas:
http://www.donkarl.com/?FAQ4.3
Ansonsten, wenn Du alle diejenigen DS im zweiten Form anzeigen willst, bei denen der "Suchhaken" gesetzt ist, dann etwa so:
Sub btnOpenForm2_Click()
Docmd.Openfrom "frmForm2",,,"Suchen <> 0"
End Sub
Hallo Franz,
die Datenbank besteht aus einem Hauptformular, das nur aus Befehlsschaltflächen besteht.
Formular1 ist das eigentliche Eingabeformular der Hörbücher (auch über das Hauptformular zu erreichen).
Vom Hauptformular aus kann man verschiedene Suchen ausführen (z.B. nach Autor oder Genre - Krimi, Historischer Roman, Sachbuch etc.) die dann (basierend auf Abfragen) wieder in anderen Formularen angezeigt werden. In diesen Formularen können Datensätze jedoch nicht verändert werden (ist so gewollt).
Nehmen wir mal an ich suche in meinem Hauptformular nach dem Genre "Thriller". Beim Klick auf die Befehlsschaltfläche der Genrensuche, öffnet sich jetzt ein Formular (nennen wir es mal "Formular2") in dem alle Titel des Genres "Thriller" angezeigt werden. In Formular2 sind Änderungen, wie bereits erwähnt, nicht möglich.
Jetzt fällt mir aber auf, dass ich bei einem Titel etwas ändern möchte. Das Formular in dem ich ändern kann, ist Formular1.
Also möchte ich jetzt bei dem Titel, bei dem ich eine Änderung vornehmen möchte, im Ja/Nein-Feld (Suchen), in Formular2 einen Haken setzten und auf die Befehlsschaltfläche "Suchen" klicken.
Das was dann passieren soll, ist, dass in das Formular1 gewechselt und dort zu dem Datensatz gesprungen wird, bei dem ich in Formular2 den Haken gesetzt habe.
Es soll auch immer nur ein Haken gesetzt werden.
Ereignisprozedur beim Öffnen von Formular1
Me!Titel.SetFocus
DoCmd.FindRecord Me!übergebenes_Suchkriterium
Von dem was ich bis jetzt beschrieben habe, kriege ich alles hin (Parameterübergabe an das neue Formular, Springen zu dem gewünschten Datensatz in Formular1, etc).
Was mir fehlt ist der Teil :"Wenn im Ja/Nein-Feld von Formular2 bei einem Datensatz ein Haken ist, nimm, wenn ich auf die Befehlsschaltfläche "Suchen" klicke, das was in "Titel" steht (und zwar nur bei dem Datensatz bei dem ein Haken ist) und speichere es in eine Variable.
Den Rest (wie ich diese Variable an Formular1 übergebe und zu dem entsprechenden Datensatz springe) kriege ich hin.
Punkt 4.3 bei DonKarl scheint nicht das zu sein was ich suche. Ich verstehe vor allem nicht was diese Routine macht und möchte sie eigentlich auch nicht übernehmen ohne es zu verstehen.
Vielleicht ist jetzt etwas verständlicher was ich bezwecken möchte, ach wenn es hierfür vielleicht elegantere Lösungen gibt.
Danke & viele Grüße,
Ralf26
Hallo,
das Ganze ist nicht ganz so sauber...
Wenn Du als Markierung einen Haken setzen willst, muß dieses Ja/Nein-Feld an ein entspr. Tabellenfeld gebunden sein.
Beim Klicken auf den Suchbutton muß der DS zunächst gespeichert werden, damit "der Haken auch in der Tabelle steht".
Sodann mit dem gezeigten Code das andere Form öffnen und den "Haken"-DS mit Übergabe der Where-Condition an die Openform-Methode filtern. Im Load-Ereignis(prozedur) des 2. Forms setzt Du den Haken wieder auf 0.
Andere (bessere) Methode wäre, den Haken einfach zu vergessen und das 2. Form durch Übergabe des Primärschlüsselwertes ( an den Where-Condition-Parameter) zu öffnen und zu filtern.
Falls es sich um ein Endlosform handelt, muß der Button im Detailbereich stehen, damit beim Klicken darauf auch der dabeistehende DS den Fokus erhält.
Hallo Franz,
hat etwas gedauert aber jetzt habe ich es.
Der entscheidende Hinweis war, dass der Haken bei dem Ja/Nein-Feld an ein Tabellenfeld gebunden sein muss (ist ja auch logisch, wenn man darüber nachdenkt).
Ich habe das ganze jetzt wahrscheinlich etwas unelegant gelöst, aber dafür verstehe ich wenigstens selbst, was ich da an VBA-Code zusammengetippt habe.
Es gibt also jetzt das an die Haupttabelle gebundene Ja/Nein-Feld.
Wenn ein Haken in dem Formular (nennen wir es wieder Formular1) gesetzt wird und man auf die Schaltfläche ,,Ändern" klickt wird mit DLookUp der Titel des Datensatzes ausgelesen und mit OpenArgs an das dann zu öffnende Formular (Formular2) übergeben. In Formular2 wird dann mit FindRecord (Ereignisprozedur beim Öffnen) zu dem entsprechenden Datensatz gesprungen.
Codeteil von Formular1
Dim Suchergebnis As String
Suchergebnis = DLookup("[Titel]", "tab_Hoerbuch", "[aendern] = True")
DoCmd.Close
DoCmd.OpenForm "Formular2", , , , , , Suchergebnis
Codeteil von Formular2
If IsNull(Me.OpenArgs) Then
Exit Sub
Else
Dim Titelsuche As String
Titelsuche = Me.OpenArgs
Titel.SetFocus
DoCmd.FindRecord Titelsuche
End If
---------------------------------------
Die Überprüfung
If IsNull(Me.OpenArgs)
habe ich deshalb gemacht, weil Formular2 auch separat (und nicht nur von Formular1 aus) aufgerufen werden kann und es dann natürlich keinen Wert für OpenArgs gibt.
Das ist – wie schon gesagt – wahrscheinlich nicht sehr elegant, aber es funktioniert.
Vielen Dank für Deine Hilfe und viele Grüße aus Mannheim.
Ralf26