Discussion:
Suchfeld
(zu alt für eine Antwort)
Nicole Gabriel
2004-09-30 12:48:19 UTC
Permalink
hy ng
ich habe ein feld erstellt wo ich nach einem artikel
suchen möchte! wie kann ich dies anstellen. falls ich z.b.
hallo eingebe, sollte er mir den artikel hallo suchen und
anzeigen...
wie mache ich diesen code?
gruss und danke
nicole
Stefan Dase
2004-09-30 13:18:16 UTC
Permalink
Hallo Nicole!
Post by Nicole Gabriel
ich habe ein feld erstellt wo ich nach einem artikel
suchen möchte! wie kann ich dies anstellen. falls ich z.b.
hallo eingebe, sollte er mir den artikel hallo suchen und
anzeigen...
Sehr pauschale Frage, was genau willst du denn machen?

Ich habe hier eine Art Telefonliste, bei der ich ein kleines Feld zum
Suchen des Namens eingebaut habe. Aufbau generell: Ein Hauptformular
(HF) ohne Datenbindung, nur das eine Textfeld zur Namenssuche und ein
Unterformular (UF). Das UF zeigt ein zweites Formular an, eine
Datenblattansicht der Telefoneinträge. Wenn ich nun in das Suchfeld
einen Namen eintippe, wird das UF gefiltert, und zwar nach jedem
Buchstaben. Dazu habe ich etwas VBA-Code in die Eigenschaft "Bei
Änderung" (OnChange) des Textfeldes eingefügt:

Private Sub txtName1_Change()

Dim sFltr As String
sFltr = "(Name1 Like '" & Me!txtName1.Text & "*')"

With Me!frmTelList
.Filter = sFltr
.FilterOn = True
End With

End Sub

"Name1" (Feldname in Tabelle), "frmTelList" (Name des UF) und "txtName1"
(Name des Suchfeldes im Formular) musst du natürlich an deine
Bezeichnungen anpassen!

HTH,
Stefan
Nicole Gabriel
2004-09-30 14:12:29 UTC
Permalink
-----Originalnachricht-----
Hallo Nicole!
Post by Nicole Gabriel
ich habe ein feld erstellt wo ich nach einem artikel
suchen möchte! wie kann ich dies anstellen. falls ich
z.b.
Post by Nicole Gabriel
hallo eingebe, sollte er mir den artikel hallo suchen
und
Post by Nicole Gabriel
anzeigen...
Sehr pauschale Frage, was genau willst du denn machen?
Ich habe hier eine Art Telefonliste, bei der ich ein
kleines Feld zum
Suchen des Namens eingebaut habe. Aufbau generell: Ein
Hauptformular
(HF) ohne Datenbindung, nur das eine Textfeld zur
Namenssuche und ein
Unterformular (UF). Das UF zeigt ein zweites Formular an,
eine
Datenblattansicht der Telefoneinträge. Wenn ich nun in
das Suchfeld
einen Namen eintippe, wird das UF gefiltert, und zwar
nach jedem
Buchstaben. Dazu habe ich etwas VBA-Code in die
Eigenschaft "Bei
Private Sub txtName1_Change()
Dim sFltr As String
sFltr = "(Name1 Like '" & Me!txtName1.Text & "*')"
With Me!frmTelList
.Filter = sFltr
.FilterOn = True
End With
End Sub
"Name1" (Feldname in Tabelle), "frmTelList" (Name des UF)
und "txtName1"
(Name des Suchfeldes im Formular) musst du natürlich an
deine
Bezeichnungen anpassen!
HTH,
Stefan
.
hy stefan

tönt schon mal gut... habe folgenden code geschrieben:

private sub Suchen_AfterUpdate()
Dim sFltr as String
sFltr = [Index] = " & Me![Suchen].Text

With Me
.Filter = sFltr
.FilterOn = True
End With

End Sub

Jetzt bringt er mir den Fehler: Laufzeitfehler 2448. Sie
können diesem Objekt keinen Wert zuweisen und er zeigt mir
die Linie .Filter = sFltr an... Was nun?

Danke nochmals und Gruss
Stefan Dase
2004-09-30 14:43:52 UTC
Permalink
Hallo Nicole!
Post by Nicole Gabriel
private sub Suchen_AfterUpdate()
Dim sFltr as String
sFltr = [Index] = " & Me![Suchen].Text
With Me
.Filter = sFltr
.FilterOn = True
End With
End Sub
Ich nehme mal an, dass dein Formular gebunden (an eine Tabelle, Abfrage
o.ä.) ist? Sonst würde das zu keinem Ergebnis führen!

1. Der Filterstring muss komplett als String übergeben werden, so wie er
bei dir, steht macht das keinen Sinn (wundert mich, dass es dort keinen
Fehler gibt?!). Außerdem ist nach der Aktualisierung die
Value-Eigenschaft verwendbar, d.h. die Text-Eigenschaft muss nicht mehr
angegeben werden:

sFltr = "[Index] = '" & Me![Suchen] & "'"

Index halte ich übrigens für einen sehr unglücklichen Feldnamen, da dies
auch ein reservierter Schlüsselbegiff ist - so wie Name, Date usw.!

Ansonsten kann ich keine Fehler entdecken.

HTH,
Stefan
Nicole Gabriel
2004-09-30 15:12:05 UTC
Permalink
-----Originalnachricht-----
Hallo Nicole!
Post by Nicole Gabriel
private sub Suchen_AfterUpdate()
Dim sFltr as String
sFltr = [Index] = " & Me![Suchen].Text
With Me
.Filter = sFltr
.FilterOn = True
End With
End Sub
Ich nehme mal an, dass dein Formular gebunden (an eine
Tabelle, Abfrage
o.ä.) ist? Sonst würde das zu keinem Ergebnis führen!
1. Der Filterstring muss komplett als String übergeben
werden, so wie er
bei dir, steht macht das keinen Sinn (wundert mich, dass
es dort keinen
Fehler gibt?!). Außerdem ist nach der Aktualisierung die
Value-Eigenschaft verwendbar, d.h. die Text-Eigenschaft
muss nicht mehr
sFltr = "[Index] = '" & Me![Suchen] & "'"
Index halte ich übrigens für einen sehr unglücklichen
Feldnamen, da dies
auch ein reservierter Schlüsselbegiff ist - so wie Name,
Date usw.!
Ansonsten kann ich keine Fehler entdecken.
HTH,
Stefan
.
hy stefan

ja, mein formular ist an eine tabelle gebunden. allerdings
ist das feld suchen niergends definiert! habe ein ein ganz
normales textfeld eingefügt!

hmmm, ich habe jetzt den lieben dings mal umgeschrieben!
nun bringt er mir zwar keinen fehler mehr, aber er öffnet
mir keinen artikel sondern lässt alle felder leer, bis auf
jenes namens suchen... was macht denn jetzt schon wieder
keinen sinn mehr? ich bin glaub echt zu blöd! habe schon
ziemlich lange kein access-vb mehr programmiert :-/

gruss - nicole
Stefan Dase
2004-10-04 08:19:01 UTC
Permalink
Hallo Nicole!

Sorry, war ein paar Tage nicht im Büro. Läuft es jetzt?
Post by Nicole Gabriel
ja, mein formular ist an eine tabelle gebunden. allerdings
ist das feld suchen niergends definiert! habe ein ein ganz
normales textfeld eingefügt!
Ok, anders würde es auch nicht funktionieren.
Post by Nicole Gabriel
nun bringt er mir zwar keinen fehler mehr, aber er öffnet
mir keinen artikel sondern lässt alle felder leer, bis auf
jenes namens suchen...
Immerhin funktioniert es schon mal. Wenn in der Navigationszeile auch
noch steht "1 von 1 (Gefiltert)", dann ist es perfekt, es werden nur
keine Datensätze gefunden, die diesen Kriterien entsprechen. Versuche
einfach mal einen Stern "*" einzugeben, dann sollten alle DS angezeigt
werden.

VG, Stefan

Kai Apel (Berlin)
2004-09-30 13:22:51 UTC
Permalink
http://support.microsoft.com/default.aspx?scid=kb%3Bde%3BD45179

da gibt es einige Möglichkeiten, soetwas zu realisieren.

Die einfachste Möglichkeit:
Variante1

zieh Dir eine Kombobox auf das Formular, da kannst Du (wenn Deinem Form eine
Query hinterliegt) als dritten Punkt auswählen Werte nachschlagen. In dieser
Kombobox kannst Du dann einen Datensatz auswählen und springst zu ihm hin.

Variante2 (so mache ich das meistens) --> Filtert Dir die Suchergebnisse
gleich

Du öffnest die Abfrage im Entwurfsmodus und trägst der Spalte Artikel unter
Kriterium folgendes ein:
Wie "*" & [Formulare]![DeinFormular]![DeinSuchfeld] & "*"
und speicherst diese Abfrage als NameAbfrage_Suche (oder was du willst)
Dann plazierst Du im Deinem Form ein Textfeld (DeinSuchfeld) und gehst unter
Eigenschaften auf Nach Aktualisierung
gehst dann in die SUB_DeinSuchfeld_AfterUpdateŽund nimmst folgenden Code

'Wenn Du mit der Abfrage arbeitest
Forms!DeinFormular.Recordsource = NameAbfrage_Suche


Variante 3 nur zum Datensatz springen
siehe FAQ 4.4 von Karl
Olaf Noehring
2004-10-01 06:29:12 UTC
Permalink
Hi Nicole
Post by Nicole Gabriel
ich habe ein feld erstellt wo ich nach einem artikel
suchen möchte! wie kann ich dies anstellen. falls ich z.b.
hallo eingebe, sollte er mir den artikel hallo suchen und
anzeigen...
Wolltes es gerad schreiben und hab noch gesehen, dass Kai (Berlin) meinen
Vorschlag schon brachte: Ich hab für sowas auch mit einem Kombifeld
gearbeitet. Denke, dass sich das in deinem Fall (also für festgelegte
Artikel) auch anbieten.

Olaf
--
* together for better software *
* Email @ Website: *
* http://www.team-noehring.de *
Dr. Friedrich Höglmeier
2004-10-01 14:17:01 UTC
Permalink
On/Am Thu, 30 Sep 2004 05:48:19 -0700, "Nicole Gabriel"
<***@ghoja.ch> wrote/schrieb:

Hallo Nicole,

ich hab' mir vor Jahren mal eine Suchfunktion zusammengestellt, die
universell verwendbar ist.

Hierzu muß lediglich im Formular eine Befehlsschaltfläche positioniert
werden, dem die folgende Funktion (BeimKlicken als Funktion)
hinterlegt ist, also so "=acbSuchen()":

---Anfang

Option Compare Database
Option Explicit

Function acbSuchen()
Dim Ctl As Control, F As Form
Dim strSuchenNach As String, strFeldname As String
Dim strTitel As String, strPrompt As String, intTaste As Integer
Dim strBookmark As String, strTemp As String

On Error Resume Next
Set Ctl = Screen.PreviousControl
Set F = Screen.ActiveForm
Ctl.SetFocus
If Err <> 0 Then
Beep
MsgBox "Fehler beim Aufruf - Funktion kann nur aus einem Formular heraus eingesetzt werden...", _
vbOKOnly + vbCritical, "acbSuchen():"
Exit Function
End If
On Error GoTo 0

strFeldname = Ctl.Name
strTitel = "Suchen in Feld »" & strFeldname & "«:"

NeueSuche:
strPrompt = "Suchbegriff eingeben (Teilbegriff möglich, GROSS/klein spielt keine Rolle):"
strSuchenNach = InputBox$(strPrompt, strTitel, "")
If strSuchenNach = "" Then Exit Function

DoCmd.FindRecord strSuchenNach, acAnywhere, False, acSearchAll, False, acCurrent, True
If InStr(Ctl, strSuchenNach) = 0 Then 'Nichts gefunden...
Beep
strPrompt = "Keinen Eintrag für Suchbegriff »" + strSuchenNach + "« in Feld »" + strFeldname + "« gefunden!" + vbCrLf + vbCrLf
strPrompt = strPrompt + "Neuen Suchbegriff eingeben?"
intTaste = MsgBox(strPrompt, vbYesNo + vbExclamation, strTitel)
If intTaste = vbYes Then GoTo NeueSuche
Exit Function
End If

Weitersuchen:
DoEvents
Beep
intTaste = MsgBox("Weitersuchen?", vbYesNo + vbQuestion, strTitel)
If intTaste <> vbYes Then Exit Function

strBookmark = F.Bookmark
DoCmd.FindNext
DoEvents
strTemp = F.Bookmark
If InStr(Ctl, strSuchenNach) <> 0 And StrComp(strBookmark, strTemp, vbBinaryCompare) <> 0 Then 'Gefunden, weitersuchen?
GoTo Weitersuchen
Else 'Nichts weiter gefunden...
Beep
MsgBox "Suchbegriff »" + strSuchenNach + "« wurde nicht nochmal gefunden...", _
vbOKOnly + vbInformation, strTitel
End If

End Function

---Ende

Damit kannst Du in jedem Textfeld Deines Formulars suchen, indem Du
vor dem Klicken auf diese Schaltfläche den Cursor in das zu
durchsuchende Feld positionierst.
Die obige Funktion ist im Modul "modSuchen" gespeichert, kann aber
natürlich in jedem anderen Modul, das Du in Deiner Datenbank
verwendest, hinterlegt werden.
Falls der Code oben in Deinem Newsreader verstümmelt ankommt, kann ich
ihn dir gerne auch mailen.

--
Gruß
hoe = Friedrich Hoeglmeier
Liebhaber des korrekt verwendeten Apostrophs
Loading...