PDA

Vollständige Version anzeigen : Befehlsschaltfl. z. Suchen von Namen in Formul.


Eniko
26.06.2001, 07:33
Hallo u. Guten Morgen, ich suche eine Möglichkeit, in einem Formular über Befehlsschaltflächen einen Begriff zu suchen, Z.B. Anfangsbuchst. von A-Z aller Namen, so dass bei Klick sofort der DS mit dem entspr. Namen im gleichen Formular angezeigt wird. So ähnlich, wie bei DB "Nordwind-Kundentelefonnr.", nur dass ich dort nicht dahintersteige, wie's gemacht wird. Ich habe eine Abfrage nach jedem Anf.-Buchst. gemacht u. diese mit der Schaltfläche gekoppelt, aber da öffnet sich immer ein neues Form.-Fenster. (A97)
Allen im Voraus vielen Dank. Eniko

Morli
26.06.2001, 09:59
Hallo Enico,

arbeitest Du mit Formular/Unterformular?
Basiert Dein Formular auf einer Abfrage?

Poste mal etwas mehr an Info, das Problem ist dann recht einfach zu lösen!

Gruß

Rainer :)

gloria
26.06.2001, 10:49
hi,
hau dir den Code mal hinter eine Schaltfläche in deinem Formular und füg ein Feld mit Namen Eingabe (das suchfeld) im Formular hinzu. In der Tabelle muß ein AutoWert Feld - hier mit Namen ID - vorhanden sein. die Felder kannst du aber umbenennen wie du willst.

On Error GoTo Err_Befehl184_Click
Dim Suchtext
Dim SatzNr, AktSatzNr As Long

SatzNr = 1
Suchtext = Me![Eingabe] '** Formular Eingabefeld
If IsNull(Eingabe) = True Then
Beep
MsgBox "Es ist KEIN Suchtext vorhanden .....", 48, "** Fehler: Namen suchen **"
Else
Weiter4:
Me![dein tabellenfeld].SetFocus
DoCmd.FindRecord Suchtext, A_START, False, A_DOWN, False, A_CURRENT, False
AktSatzNr = Me![ID] '** Autowert-Feld aus Tabelle ***
If AktSatzNr <> SatzNr Then
SatzNr = AktSatzNr
Next4:
If MsgBox("Soll weitergesucht werden ??", 4, "** Suchen: Namen **") = 6 Then
GoTo Weiter4
Else
Me![Eingabe].SetFocus
End If
Else
If MsgBox("Keine (weiteren) Datensätze zum Suchtext: " & Chr(13) & "<< " & Eingabe & " >> vorhanden." & _
Chr(13) & Chr(13) & "Suche wieder ab 1. Datensatz ......", 68, "** ENDE: Namen suchen **") = 6 Then
DoCmd.GoToRecord , , A_FIRST
Me![Familienname].SetFocus
DoCmd.FindRecord Suchtext, A_START, False, A_DOWN, False, A_CURRENT, False
GoTo Next4
End If
End If
End If

EndeBefehl184_Click:
Exit Sub

Err_Befehl184_Click:
Select Case Err
Case 94
Err = 0
DoCmd.GoToRecord , , A_FIRST
Resume Weiter4
Case Else
MsgBox "FehlerCode: " & Str(Err) & " ist aufgetreten, bitte notieren", 16, "** Fehler: Suchen **"
Err = 0
Resume EndeBefehl184_Click
End Select

Probiers aus, ist interessant. Da kann man auch nach z.B. <*eressant> suchen, um interessant zu finden.

ciao glori

Eniko
26.06.2001, 11:00
Hallo Morli, ich habe nur ein Formular, welches auf einer Abfrage beruht. Mit Makro ist es mir schon geglückt, nur kann ich den Cursor nicht an eine beliebige Stelle (Feld) setzen, um einmal eine Stadt mit "N" und das nächste Mal einen Namen mit "N" zu suchen.
Eniko

Morli
26.06.2001, 12:16
Hallo Eniko,

also mal angenommen, dein Formular "Daten" hat nur die Felder "Namen" und "Stadt".

Im Formularkopf hast Du zwei ungebundene Felder "SucheName" und "SucheStadt". Diesen Feldern kannst Du beim Ereignis "Nach Aktualisieren" zuweisen:

DoCmd.ApplyFilter "", "[Namen] Like """ & Me.SucheName & "*"""

oder

DoCmd.ApplyFilter "", "[Stadt] Like """ & Me.SucheStadt & "*"""

Aufheben kannst Du den Filter mit:
DoCmd.ShowAllRecords

Gruß

Rainer ;)

Eniko
26.06.2001, 12:52
Hallo Rainer,
da brauch ich ja für jedes Feld eine weiteres Suchfeld, das wird zu unübersichtlich. Die Variante von Gloria sieht gut aus, aber läuft noch nicht.(Fehlermeldungen).
Mit Makro und Cursor vorher setzen auf die zu suchende Zeile (Feld) , geht wohl nicht? Würde mir am besten gefallen, natürlich mit dem Nachteil, dass dann nur nach einer festen Buchstabenfolge gesucht werden kann. D.H. für jeden Anfangsbuchstaben mind. ein Makro. Eniko

Morli
26.06.2001, 13:07
Hi Eniko,

Du kannst natürlich auch nur mit einem Suchfeld und mehreren Schaltflächen arbeiten.
Dann mußt Du den einzelnen Schaltflächen nur zuweisen, in welchen Feld gesucht werden soll!

z.B. Schaltfläche 1 sucht im Feld Namen, Schaltfläche 2 im Feld Stadt, u.s.w.

Gruß

Rainer :)

P.S. Vielleicht verstehe ich auch nicht so ganz wie Dein Formular aussehen soll!

Eniko
26.06.2001, 13:23
Rainer, wenn die Zuweisung der Schaltflächen zu den Feldern, in denen gesucht werden soll ersetzt werden kann durch die Positionierung des Cursors auf das entspr. Feld, wäre ich happy. Z.B. Suchbegriff in Suchfeld schreiben (Beisp.:N), dannach Cursor z.B. auf Feld "Stadt" und auf "suchen" klicken. DS mit Nürnberg wird angezeigt, oder Cursor auf "Nachname" und DS mit "Neumann" wird angezeigt. Eniko

Morli
26.06.2001, 14:15
Hallo Eniko,

Du hast Wünsche.......

Also Problem bei der Sache ist, das in dem Moment wo Du auf die Schaltfläche klickst, diese den Focus hat und Du nicht ermitteln kannst, welches Feld vorher den Focus hatte.
Daher mußt Du in deinen Formular eine globale Variable mit

DIM CtlName as String

anlegen.

Bei Deinen Formularfeldern nuß Du dann beim Ereignis "Bei Focusverlust" eingeben:

CtlName = ActiveControl.Name

Dann kannst Du bei der Schaltfläche den Code Beim Klicken eingeben:

DoCmd.ApplyFilter "", "[" & CtlName & "] Like """ & Me.SucheStadt & "*"""

So sieht da bei mir z.B. aus:

Dim CtlName As String

Private Sub Befehl8_Click()
If CtlName <> "" Then
DoCmd.ApplyFilter "", "[" & CtlName & "] Like """ & Me.Suche & "*"""
End If

End Sub

Private Sub Stadt_LostFocus()
CtlName = ActiveControl.Name
End Sub

Gruß

Rainer :)