Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Formular mit Suchfeld auf Unterformular

Begonnen von AllenWalker, August 25, 2013, 21:08:57

⏪ vorheriges - nächstes ⏩

AllenWalker

Hallo,

Ich möchte gerne ein Formular mit einem Suchfeld erstellen. In einem Unterformular sollen alle Datensätze (Kundendaten) angezeigt werden und anhand des eingegebenen Suchwort (Nachname) gefiltert werden.
Die Filterung soll bereits beginnen wenn ich Buchstabe für Buchstabe eingebe (müsste das Ereignis "OnChange" sein)

Habe mir ein paar Gedanken über die Umsetzung gemacht. Ich gehe davon aus dass man einen String zusammenbasteln soll für die Abfrage. Die Abfrage sieht in etwa so aus:

SELECT K.Name, K.Vorname
FROM Kontakte AS K
WHERE K.Name LIKE '...*'

Hinter dem LIKE würde die eingegebenen Buchstaben mit dem Jokerzeichen (*) kommen.

Was mir bei meinen Überlegungen fehlt ist wie ich diese Filterung (falls korrekt) auf das Unterformular anwenden könnte. Eine Umsetzung anhand diesem Lösungsvorschlag klappte nicht wie gewünscht.

Danke sehr,
Gruß,
AllenWalker

DF6GL

Hallo,


es soll ja auch gefiltert und nicht gesucht werden...


Sub Suchfeld_Change()
Me!Unterform_Steuerelementname.Form.Recordsource = "SELECT [Name], Vorname FROM Kontakte  WHERE [Name] LIKE '" & Me!Suchfeld.Text & "*'"
End Sub
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Danke sehr für deine Hilfe.
Die Codezeile habe ich für die 3 Suchfelder eingefügt und angepasst aber glaube habe noch einen kleinen Fehler drin.
Im Anhang befindet sich ein Screenshot des Problems und folgende Codezeilen habe ich bei den Textfeldern hinterlegt.


Private Sub tbNachnameSuche_Change()

  Me!SucheKontakteSub.Form.RecordSource = "SELECT [kliName], kliVorname, kliOrt FROM Kontakte WHERE [kliName] LIKE '" & Me!tbNachnameSuche.Text & "*'"

End Sub

Private Sub tbVornameSuche_Change()

  Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, [kliVorname], kliOrt FROM Kontakte WHERE [kliVorname] LIKE '" & Me!tbVornameSuche.Text & "*'"

End Sub

Private Sub tbWohnortSuche_Change()

  Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, kliVorname, [kliOrt] FROM Kontakte WHERE [kliOrt] LIKE '" & Me!tbWohnortSuche.Text & "*'"

End Sub



Danke sehr,
Gruß,
AllenWalker

[Anhang gelöscht durch Administrator]

Stapi

Hallo

Aus meiner Sicht solltest du das als mehrstufigen Filter aufbauen. Zum Verständnis deiner Aufgabe:

Im ersten Feld Nachname suchst du alle Nahnamen mit "H"

Darauf aufbauen sollten im zweiten Feld nur alle mit "Peter" gefiltert werden

Was im Dritten Feld Wohnort dann in deinem Fall "Frankfurt" übrig bleibt, würde es mehre "H, Peter" in mehren Wohnorten geben so ist hier nochmals eine Auswahl zu treffen.
Grüße aus dem schönen NRW
Stefan

DF6GL

Hallo,

es ist kein Fehler im Code zu entdecken.. zumindest sehe ich keinen. 


Anmerkung zu den Eckklammern:   Die Eckklammern sind nur dort nötig, wo ein reserviertes Wort verwendet wird ("Name" im ersten Post) . Damit wird Access bekannt gemacht, dass es sich um einen Objektnamen handelt und nicht eben um ein reserviertes Wort, das eine andere Bedeutung für Access darstellt ( z. B: der Name einer Methode/Funktion oder  einer Eigenschaft.

Die Suchfunktion arbeitet mit unabhängigen Textfeldern , so dass immer nur die Spalte gefiltert wird, bei dessen Suchfeld gerade die Eingabe erfolgt.  Stapi hat für abhängiges Suchen ja einen Vorschlag gebracht..
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Aufbauend auf die Antwort von Stapi habe ich versucht die mehrstufige Filterung um zu setzen aber ohne Erfolg.


Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, [kliVorname], kliOrt FROM Kontakte WHERE [kliName] LIKE '" & Me!tbNachnameSuche.Text & "*' AND [kliVorname] LIKE '" & Me!tbVornameSuche.Text & "*'"


Bekomme bei dieser Zeile den folgenden Fehler

Zitat
You can't reference a property or method for a control unless the control has the focus.

Die Bedeutung der Eckklammern habe ich nicht ganz verstanden.

bahasu

Hi

was passiert bei:
Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, [kliVorname], kliOrt FROM Kontakte WHERE [kliName] LIKE '" & Me!tbNachnameSuche & "*' AND [kliVorname] LIKE '" & Me!tbVornameSuche & "*'"

Harald
Servus

Stapi

Hallo

Ich persönlich würde Kombifelder den Textfeldern vorziehen.
ZitatMe!SucheKontakteSub.Form.RecordSource = "SELECT kliName, [kliVorname], kliOrt FROM Kontakte WHERE [kliName] LIKE '" & Me!tbNachnameSuche.Text & "*' AND [kliVorname] LIKE '" & Me!tbVornameSuche.Text & "*'"
Bei deiner Codezeile müssen alle drei Felder ausgewählt sein, erst dann kann der Filter gesetzt werden. Vorraus gesetzt die gesuchten Namen sind in deiner Tabelle auch vorhanden und so geschrieben wie du sie suchst.
Grüße aus dem schönen NRW
Stefan

AllenWalker

@bahasu
Egal ob das Textfeld Nachname leer ist oder ein Buchstabe eingetippt wurde bewirkt eine Eingabe bei Vorname keine Filterung

@Stapi
Danke für den Hinweis aber würde es auch mit Textfeldern klappen?

Stapi

Hallo

ZitatDanke für den Hinweis aber würde es auch mit Textfeldern klappen?

Bei Kombifelder kann ich vorgeben "nur Listeneinträge" = ja , das vereinfacht die Suche da nur die Namen oder Wohnorte dir Angezeigt werden die du auch über das Formular in die Tabelle eingegeben hast.
Grüße aus dem schönen NRW
Stefan

DF6GL

Hallo,

eine abhängige Filterung kann bei Textfeldern sich nur im Form selber auswirken. Die Such-Textfelder habe ja keine einschränkbare "Liste"..


Private Sub tbNachnameSuche_Change()

 Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, kliVorname, kliOrt FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  And kliOrt LIKE '" & Me!tbWohnortSuche & "*'"



End Sub

Private Sub tbVornameSuche_Change()

  Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, kliVorname, kliOrt FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche& "*'   And kliVorname LIKE '" & Me!tbVornameSuche.Text  & "*'  And kliOrt LIKE '" & Me!tbWohnortSuche & "*'"

End Sub

Private Sub tbWohnortSuche_Change()

  Me!SucheKontakteSub.Form.RecordSource = "SELECT kliName, kliVorname, kliOrt FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  And kliOrt LIKE '" & Me!tbWohnortSuche.Text   & "*'"

End Sub

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

bahasu

Hi,

mein Vorschlag bezog sich auf die Fehlermeldung:

Zitat von: AllenWalker am August 26, 2013, 18:34:03
Bekomme bei dieser Zeile den folgenden Fehler

You can't reference a property or method for a control unless the control has the focus.

Ist der Fehler noch da?

Sind die Namen der Suchfelder und der Tabellenfelder im Formular und in der VBA-Anweisung stimmig?

Harald
Servus

AllenWalker

@bahasu
Die Fehlermeldung trat nicht mehr auf nachdem ich deine Codezeile eingefügt hatte und die Bezeichnung stimmen überein.

@DF6GL
Danke für deine Hilfe. Es klappt  :D

AllenWalker

Ich muss diesen alten Thread nochmals ausgraben da ich eine Änderung an dem Suchformular vornehmen möchte.

Anstelle des Textfeldes für den Wohnort, soll eine Auswahl für den Standort anhand einer ComboBox gemacht werden. Die Werte für die ComboBox kommen aus der Tabelle Standorte. Diese Tabelle ist mit der Tabelle Kontakte verknüpft. Wenn ich in das Unterformular bei Standort ein Feld auswähle erscheint auch da eine ComboBox. Das gleiche wenn ich ein Feld in der Tabelle Kontakte bei Standort auswähle. Im Feld Standort in der Tabelle Kontakte ist bei RowSourceType "Table/Query" und bei RowSource "SELECT Standort.ID, Standort.Ort FROM Standort ORDER BY [ID];" eingetragen. Gehe mal davon aus daher kommt auch die ComboBox im Unterformular.

Habe auch für die 3 Felder das Event OnChange angepasst aber bekomme folgende Fehlermeldung:
Zitat
Data type mismatch in criteria expression

Hier ist mein angepasster Quellcode:

Private Sub cbStandortAuswahl_Change()
 
  MsgBox "Auswahl: " & Me!cbStandortAuswahl.ItemData(Me!cbStandortAuswahl.ListIndex)
 
  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  And KBO = '" & Me!cbStandortAuswahl.ItemData(Me!cbStandortAuswahl.ListIndex) & "*'"
 
End Sub

Private Sub tbNachnameSuche_Change()

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  And KBO = '" & Me!cbStandortAuswahl.ItemData(Me!cbStandortAuswahl.ListIndex) & "*'"

End Sub

Private Sub tbVornameSuche_Change()

    Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'   And kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'  And KBO = '" & Me!cbStandortAuswahl.ItemData(Me!cbStandortAuswahl.ListIndex) & "*'"

End Sub


Möchte gerne noch vermerken, dass Teile der Datenbank bereits vorgefertigt waren bevor ich die Funktion einbauen möchte.

Danke sehr,
Gruß,
AllenWalker

DF6GL

Hallo,

nach der Schilderung zu urteilen, benutzt Du Nachschlagefelder in der Tabelle...  Wirf die raus, die sorgen in den meisten Fällen für Verwirrung und Ärger.

Die Kombifelder im Form bleiben natürlich.


Vermutlich muss es so lauten:

.....  Me!tbVornameSuche & "*'  And KBO =" & Me!cbStandortAuswahl
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access