PDA

Vollständige Version anzeigen : Abfrage über ein Textfeld im Formular


Thomas01
24.03.2006, 09:42
Hallo,

es gibt folgendes Problem in meiner Datenbank.


• Ich habe ein Formular, welches als Datenblatt erstellt wurde.

• Dieses Datenblatt ist in einem Registersteuerelement als Unterformular
eingefügt.

___________________________

Ich will nun eine Abfrage erstellen.

• Es soll über eine Eingabe in einem Textfeld (welches sich auf dem Formular
befindet) nach einem bestimmten Text gesucht werden.

• Dieses Suchergebnis sollte ähnlich einem Filter, in dem Datenblatt angezeigt
werden.

• Wie kann ich nach diesem Text suchen, ohne das sich ein anderes Fenster
öffnet? Ich will das Ergebnis in dem Datenblatt haben.

mfg

Thomas

Lia
24.03.2006, 10:52
Ist das Textfeld zum suchen im Hauptformular oder mit im Unterformular?

Welches Fenster öffnet sich denn dann?

Normalerweise kann man sowas mit einem Filter machen.

Thomas01
27.03.2006, 08:48
Hallo Lia,

das Textfeld befindet sich auf dem Register, in welchem ein Datenblatt als Unterformular eingefügt ist. D.h. das Textfeld befindet sich ausserhalb des Datenblattes.

Das mit dem Filter ist eine gute Idee.
Aber in diesem Fall brauche ich das Textfeld, in dem ich einen Suchbegriff eingeben kann und das dann die Ergebnisse in dem Datenblatt liefert, ohne ein neues Fenster aufzumachen.

Lia
27.03.2006, 09:38
Du musst schon sagen, was du damit meinst:
...ohne ein neues Fenster aufzumachen.
Welches Fenster?

Thomas01
27.03.2006, 11:10
Bisher habe ich Abfragen im Abfragefenster (Entwurfsansicht) erstellt.

Z.B.: Wie [Nach xxx suchen] & "*"

Dann habe ich eine Schaltfläche auf dem Formular erstellt, welche diese Abfrage aufruft.

Nach Eingabe von bestimmten Text habe ich diese Abfrage ausgeführt und die Ergebnisse sind in einem neuen Fenster (Tabelle angezeigt worden).

Ich möchte aber, dass die Ergebnisse in dem Formular angezeigt werden, auf dem sich die Schaltfläche befindet.

Ähnlich einem Filter. War das verständlich?

mfg

Thomas

Lia
27.03.2006, 12:04
Das ist verständlich. Das ist aber was anderes als ein Filter.

Das Datenblatt-Formular (als Unterformular) ist doch bestimmt an eine Tabelle/Abfrage gebunden. In den Optionen wird diese Tabelle/Abfrage unter "Daten/Datenherkunft" gespeichert. Direkt darunter gibt es die Option "Filter". Diesen Filter kann man auch über VBA festlegen.

Thomas01
28.03.2006, 08:35
Das habe ich gefunden.

Das Problem ist nur, dass das Hauptformular (Register) keine Datenherkunft hat. In diesem Hauptformular ist das Datenblatt als Unterformular eingefügt.

Auf dem Hauptformular soll aber das Textfeld erstellt werden, über das ich dann die verschiedenen Daten suchen will.

Bisher habe ich noch keinen Filter in VBA erstellt. Hast Du ein Codebeispiel, oder einen Ansatz?

mfg

Thomas

Lia
28.03.2006, 09:42
Vielleicht kannst du damit was anfangen.


Private Sub cmd_filter_on_Click()
Me!UNTERFORMULAROBJEKT.Form.Filter = "TABELLE.FELD LIKE '*" & Me!TEXTFELD_IM_HAUPTFORMULAR & "*'"
Me!UNTERFORMULAROBJEKT.Form.FilterOn = True
End Sub

Private Sub cmd_filter_off_Click()
Me!UNTERFORMULAROBJEKT.Form.FilterOn = False
End Sub


Hier sind 2 Schaltflächen:
1. filtern
2. Filter entfernen

Die Bezeichnungen in GROSSBUCHSTABEN sind Objekt-Bezeichnungen. Die musst du durch deine Namen ersetzen.

Thomas01
28.03.2006, 11:12
Hallo Lia,

langsam kommen wir der Lösung näher glaube ich.

Nur jetzt gibt es das Problem, dass das Textfeld keine Eingabe zulässt.

Muss ich da irgendetwas mit Datenherkunft einstellen? Ich habe die Datensatzherkunft eingestellt, den Standardwert etc. Aber ich kann nichts eingeben.

Entweder steht da #Name? oder Ungebunden.

In dem Eigenschaftsfenster ist es aktiviert und auch ansonsten kann ich nichts entdecken. Woran könnte das Deiner Meinung nach liegen?

mfg

Thomas

Lia
28.03.2006, 12:03
Sorry, habe vergessen, das zu erwähnen. Das Feld muss ungebunden bleiben. Also einfach ein Textfeld erstellen und es vernünftig benennen.

In dieser Zeile des Codes:
Me!UNTERFORMULAROBJEKT.Form.Filter = "TABELLE.FELD LIKE '*" & Me!TEXTFELD_IM_HAUPTFORMULAR & "*'"
musst du dann den Textfeldnamen eintragen. Die * habe ich dahin gemacht, damit du weißt, wie es aussehen kann, wenn man * mitaufnimmt.
=> mit diesem Code wird nach Werten gesucht, die vorne wie auch hinten noch was dran haben können

Thomas01
29.03.2006, 08:42
Hallo Lia,

das Textfeld mach Probleme, die ich bisher nicht kannte. Es ist in diesem Formular nicht möglich Eingaben in das Textfeld zu machen. Ich habe es schon oft gemacht (Textfelder auf Formulare), aber noch nicht so (Formular-Register-Unterformular in Register). Auf anderen Formularen geht es. Aber in diesem nicht. Ich kann auch keine Einstellung finden, an der es meiner Meinung nach liegen könnte.

Wie kann ich Eingaben in das Textfeld machen?
Hast Du eine Idee?

mfg

Thomas

Anne Berg
29.03.2006, 09:12
Das Textfeld sollte doch wohl ungebunden sein, dann kannst du dort deine Suchmasken eingeben und zum Filtern des Unterformulars verwenden.
Zeige doch mal den bisherigen Code dazu und vielleicht einen Screenshot von dem Feld im Entwurfsmodus (mit Eigenschaften).

Thomas01
29.03.2006, 10:22
Hallo Lia,

es funktioniert. Danke. Das ist genau das was ich gesucht habe. Eine tolle Lösung.

Nun noch eine Frage. Der Text wird in einem Feld gesucht. Wie bringe ich den Filter dazu, nach dem Text in der ganzen Tabelle zu suchen?

mfg

Thomas

Thomas01
29.03.2006, 10:29
Hallo Anne,

danke für die Antwort. Das Problem war, dass in dem Eigenschaftsfenster des Hauptformulars Bearbeiten auf Nein eingestellt war. Habe es auf Ja geändert und dann hat es funktioniert.

mfg Thomas

docbyte
29.03.2006, 11:43
Ich habe jetzt alles soweit nachgebaut und soweit funktionier auch alles, nun möchte ich aber in dem Formular (Hauptformular) das Feld selber aussuchen in das gesucht werden soll und das per Kombinationsfeld.
Bisher habe ich ein Kombinationsfeld erstellt und eine Werteliste erstellt indem dann die Spalenüberschriften Vorkommen (die Originalspaltennamen).

Bei dem code

Me!UNTERFORMULAROBJEKT.Form.Filter = "TABELLE.FELD LIKE '*" & Me!TEXTFELD_IM_HAUPTFORMULAR & "*'"

habe ich dann "FELD" in den Namen des Kombinantionsfeld umbenannt.
Wenn ich das ganze jetzt ausprobiere und dann auf "filtern" klicke kommt folgende Fehlermeldung:

Laufzeitfehler 2448
Sie können diesem Objekt keinen Wert zuweisen.

Anne Berg
29.03.2006, 11:48
Kannst du bitte mal zeigen wie du das gemacht hast, nicht nur beschreiben?!

so vielleicht:
... = "TABELLE." & Me!Kombifeld & " LIKE '*" & Me!TEXTFELD_IM_HAUPTFORMULAR & "*'"

docbyte
29.03.2006, 11:55
genau so

Me!unterform.Form.filter = "Tabelle1.&Me!kombfeld LIKE '*" & Me!filtertext & "*'"

Anne Berg
29.03.2006, 12:00
Dann vergleiche mal meinen Vorschlag mit deinem Code... ;)

docbyte
29.03.2006, 12:05
VIELEN MEGA GROßEN DANK! ES GEHT! HeURekkA *ausflipp* :upps: :boah: :grins: :grins: :p

Anne Berg
29.03.2006, 12:08
Ach du Schreck, du bist aber leicht in Ekstase zu bringen! :D

docbyte
29.03.2006, 12:38
Ekstase find ich gut :)

Thomas01
30.03.2006, 09:58
Hallo,

in der DB soll ein Schlüsselwort gesucht werden, welches vorher in das oben beschriebene Textfeld eingegeben wurde. Anschliessend sollen alle Spalten, in denen das Wort vorkommt dargestellt werden.

Geht das ohne die Angabe der Spalten? Ich möchte die ganze DB nach diesem Wort durchsuchen.

mfg

Thomas

Lia
30.03.2006, 10:21
Dazu müsstest du den Filter erweitern. Also:

Me!UNTERFORMULAROBJEKT.Form.Filter = "TABELLE.FELD1 LIKE '*" & Me!TEXTFELD & "*' OR TABELLE.FELD2 LIKE '" me!TEXTFELD & "' OR..."

Bei vielen Spalten ist es sehr aufwendig, aber etwas anderes fällt mir jetzt ganz spontan nicht ein. Vielleicht kennt ja jemand anders eine Lösung.

Die ganze DB danach zu durchsuchen, stelle ich mir schwierig vor.

Anne Berg
30.03.2006, 10:31
Dann solltest du vielleicht besser die Suchen-Funktion einsetzen, anstatt die Daten zu filtern.

DoCmd.RunCommand acCmdFind

Thomas01
30.03.2006, 11:23
Danke für diese Lösung. Sie hilft mir im Moment weiter.


mfg

Thomas

Lia
30.03.2006, 12:03
Ich wusste schon, warum ich zuerst statt "jemand anders" "Anne" schreiben wollte. ;)

Anne Berg
30.03.2006, 12:59
... nun übertreib mal nicht, Julia :redface:

Thomas01
31.03.2006, 07:38
Danke für diesen Vorschlag. Ich werde ihn in einer anderen DB verwenden.

mfg
Thomas