Hallo zusammen,
ich möchte in meinem Formular gerne ein Suchfeld, in dem ich auch Teilangaben machen kann.
z.B der Kunde heißt MG Motoren, dann möchte ich, dass ich durch eingabe von Motoren den Kunden finden kann.
Ich habe jetzt ein Suchfeld mit dem Assistenten erstellt. Nur hier muß ich den genauen Namen eingeben.
Für Hilfe wäre ich sehr dankbar.
Gruß
Markus
Hallo,
dann zeige bitte mal den Code, wie Du es mit dem ganzen Namen gemacht hast.
gerne... wie gesagt mit dem Assistenten erstellt
Private Sub Kombinationsfeld130_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[KDNR] = " & Str(Me![Kombinationsfeld130])
Me.Bookmark = rs.Bookmark
End Sub
Hallo,
mit einem Kombifeld geht das nicht. Nimm ein normales Textfeld.
Der Code muss etwas angepasst werden. Du darfst jetzt nicht mehr mit der KDNR vergleichen, sondern mit dessen Name.
Private Sub TextFeld_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[KundenName] Like "*" & Str(Me![TextFeld]) & "*"
Me.Bookmark = rs.Bookmark
End Sub
Vielen Dank für die Antwort, aber leider.... es wird was gesucht nur gefunden wird nichts.
ich habe den code so eingeben bzw verändert.
Private Sub Text244_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[Name1] Like " * " & Str(Me![Text244]) & " * ""
Me.Bookmark = rs.Bookmark
End Sub
da habe ich bestimmt was falsch gemacht-oder?
Hallo,
ja....
niemand hat was von Leerzeichen um die Sternchen herum gesagt/geschrieben..
(btw: die Str-Funktion könnte man auch weglassen)
Hallo Franz,
ich lösche die Leerstellen neben den*, wenn ich wieder in den Code gehe, sind sie wieder drin.
und ich bekomme den Fehler Laufzeitfehler 13, Typen unverträglich.
Irgendwie soll es bei mir nicht funktionieren.
Hallo,
sorry, da hatte ich einen Fehler genacht.
rs.FindFirst "[Name1] Like '*" & Str(Me![Text244]) & "*'"
Vor dem Stern und nach dem Stern ein Hochkomma.
So viel Hilfe...
geht aber leider nicht, immer noch die gleiche Fehlermeldung.
Ich denke, dass ich was falsch mache.
Die daten kommen aus einer Tabelle und sind Textfelder.
Müssen die daten aus einer Abfrage kommen ?
Grußr
markus
.. noch eine Frage...
was ist denn, wenn mehrere Datensätze mit der Suchabfrage übereinstimmen würden?
Hallo,
ich denke, so wirst du deine Aufgabenstellung nicht erfüllen können. Mit FindFirst und Bookmark wird immer ein DS gefunden.
Mit FindFirst und Bookmark findet man einen konkreten DS und mit Weitersuchen (Button) kann dann mit FindNext weitere DS gesucht werden.
Wenn du mit Teilstrings suchen willst, musst du die Datenherkunft des Formulars mit einen dynamischen SQL-String verändern, dann bekommst du auch eine entsprechen Menge an DS als Ergebnis.
Gruß Oma
Hallo,
nochmal von vorn:
erstelle ein Endlosform mit Datenherkunft zu der entspr. Tabelle und erzeuge die nötigen Textfelder.
erstelle im Formularkopf ein ungebundenes Textfeld ("txtKundenname") und dafür eine Ereignisprozedur "Bei Änderung" oder "Nach Aktualisierung".
schreib diesen Code in die Prozedur:
Sub txtKundenname_Afterupdate() ' oder Sub txtKundenname_Change()
Me.Recordsource = "Select * from tblDeineTabelle where [KundenName] Like '*" & Me!txtKundenname & "*'"
End Sub
Das Endlosform zeigt dann alle passenden Datensätze an.
Der ursprüngliche Code mit Findfirst positioniert ja nur auf den ersten gefundenen Datensatz.
Anonsten mußt Du genauer beschreiben, was exakt passieren soll.
Hallo,
na, sag ich doch!!
Gruß Oma
Hi oma,
ja, aber erst, als ich schon am Schreiben war.. ;D
Oder , wenn du alle Datensätze angezeigt bekommen möchtest die ähnlich klingen , dann so :
Erstelle ein Formular " Suchformular" und passe dort dein Unterformular, dass du tabellarisch darstellst ein ( wie von Franz beschrieben.
Private Sub DeinTextSuchFeld_AfterUpdate
Dim krit As String
krit = ""
If Not IsNull(Me!DeinTextSuchFeld) Then krit = krit & " And DeinFeldausdemUnterformular Like '*" & Me!DeinTextSuchFeld & "*'"
If krit <> "" Then krit = Mid(krit, 6)
Me!NamedeinesUnterformulars.Form.Filter = krit
Me!NamedeinesUnterformulars.Form.FilterOn = True
End If
Dann werden dir im Ufo alle Ds angezeigt die irgendwie auf zb "Motor" lauten ect.
Gurss Bernie
Hallo Bernie,
und warum bei einem Feld mit einem krit-String arbeiten, ein AND zufügen, und dann wieder abziehen ;D
und ein End IF zuviel
Gruß Oma
Erstmal vielen dank an alle die mir sooo viel geholfen haben und geduld haben.
Es funktioniert !
ich habe do gemacht wie es Franz beschrieben hat.
Jetzt noch 2 Fragen
Wenn ich das bestehende Formular, in den Formularkopf ein zweites Textfeld mache und genauso vorgehe wie beim ersten ( wie es Franz ) beschrieben hat,
müßte es doch eigentlich auch mit anderes Suchkriterien funktionieren-oder? Es geht nämlich nicht.
Ich wollte mir eine ganze Suchmaske machen mit Ort und Telefonnummer und so.
Wenn es nicht geht ist es auch nicht schlimm.
Als ich das Suchfeld mit dem Assistenten erstellt habe, war der aktuelle DS angezeigt. Jetzt natürlich nicht... welcher soll es auch sein.
Kann ich das mit einem Doppelklick oder einem Button noch lösen?
Dann wäre meine DB schon fast perfekt.
LG
aus dem verregnetem Norden
Markus
Hallo,
natürlich geht die Sache auch mit mehreren Suchfeldern, dann muss aber der Code u. die Vorgehensweise etwas geändert werden.
1. Mache im Formularkopf mehrere Suchfelder z.B SuchfeldKunde, SuchfeldOrt (wenn Kundenname und Ort in der Tabelle Kunden vorhanden ist)
2. Mache ein Button Suchen im Formularkopf mit :
Private Sub Suchen()
Dim krit As String, strSQL As String
krit = "": strSQL = ""
If Not IsNull(Me!SuchfeldFirma) Then krit = krit & " And Firma Like '*" & Me!SuchfeldFirma & "*'"
If Not IsNull(Me!SuchfelOrt) Then krit = krit & " And Ort Like '*" & Me!SuchfeldOrt & "*'"
strSQL = "SELECT * FROM DeineTabelle"
If krit <> "" Then strSQL = strSQL & "WHERE" & Mid(krit, 5)
Me.RecordSource = strSQL
End Sub
So werden die 2 Suchbegriffe (oder auch mehrerem , wenn du willst) zu einem Suchstring zusammengefügt.
wenn du die Suchbegriffe aus den Feldern entfernst u. den Button Suchen betätigst, bekommst du dann alle Datensätze.
Natürlich brauchst du auch nur mit einem Feld selektieren.
3. Damit der User leichter die jeweilige Selektion wieder aufhebt, ist ein Button Alle im Kopf zweckmäßig mit:
Private Sub Alle_Click()
Me.RecordSource = "Select * from DeineTabelle"
End Sub
Gruß Oma
Hallo Oma,
Ich sage es nur ungern.. aber es geht nicht. :-[
Ich habe den Code so abgeändert. Bei mir ist der Firmenname Name1. Heißt es nicht Privat Sub suchen_click() ?
Das geht aber auch nicht.
Private Sub suchen()
Dim krit As String, strSQL As String
krit = "": strSQL = ""
If Not IsNull(Me!suchfeldname1) Then krit = krit & " And name1 Like '*" & Me!suchfeldname1 & "*''
If Not IsNull(Me!suchfeldort) Then krit = krit & " And Ort Like '*" & Me!suchfeldort & "*'"
strSQL = "SELECT * FROM tbl_adresse"
If krit <> "" Then strSQL = strSQL & "WHERE" & Mid(krit, 5)
Me.RecordSource = strSQL
End Sub
Gruß
Markus
Hallo,
natürlich mit Click ;D
diese Zeile ist bei dir falsch:
If Not IsNull(Me!suchfeldname1) Then krit = krit & " And name1 Like '*" & Me!suchfeldname1 & "*''
Mit meinem Beispiel, wenn die Suchfelder SuchfeldFirma u. SuchfeldOrt heissen!
If Not IsNull(Me!SuchfeldFirma) Then krit = krit & " And name1 Like '*" & Me!SuchfeldFirma & "*'"
du musst die Namen der Suchfelder u. die Namen der Tabellenfelder unterscheiden!
Gruß Oma
Off Topic
@ Oma , ich wollt doch auch mal helfen ;D den Code gabst du mir vor ein paar Monaten bzw jahren ;D
Hallo Bernie,
das du auch helfen willst - dagegen ist ja auch nichts zu sagen.
Inzwischen hast du dir ja auch schon etliches angeignet.
Der Code-Ausschnitt ist nur nicht so optimal, war aber auch nur ein spaßiger Hinweis ;D
Weiter so mit dem Helfen!
Gruß Oma
Hallo...,
ich finde´es auch schön, dass mir alle helfen möchten :-)
Aber ich bekomme es nicht hin.
Den Button habe ich B_suchen benannt, in name1 ist der Firmenname, Ort ist Ort.
Die Textfelder heißen, suchfeldort und suchfeldfirma.
Ich mache doch alles richtig-oder?
Gruß Markus
Private Sub b_suchen_click()
Dim krit As String, strSQL As String
krit = "": strSQL = ""
If Not IsNull(Me!suchfeldfima) Then krit = krit & " And name1 Like '*" & Me!suchfeldfirma & "*''"
If Not IsNull(Me!suchfeldort) Then krit = krit & " And Ort Like '*" & Me!suchfeldort & "*'"
strSQL = "SELECT * FROM tbl_adresse"
If krit <> "" Then strSQL = strSQL & "WHERE" & Mid(krit, 5)
Me.RecordSource = strSQL
End Sub
Hallo,
Ohne Worte ein kleines Beispiel....
Gruß Oma
[Anhang gelöscht durch Administrator]
Hallo,
@jeep_66:
nein, Du machst nicht alles richtig, zumindest stimmt der Code nicht:
Private Sub b_suchen_click()
Dim krit As String, strSQL As String
krit = "": strSQL = ""
If Not IsNull(Me!suchfeldfima) Then krit = krit & " And name1 Like '*" & Me!suchfeldfirma & "*''" ---> "*'" nur ein Hochkomma
If Not IsNull(Me!suchfeldort) Then krit = krit & " And Ort Like '*" & Me!suchfeldort & "*'"
strSQL = "SELECT * FROM tbl_adresse"
If krit <> "" Then strSQL = strSQL & "WHERE" & Mid(krit, 5) --->& " WHERE" & Leerzeichen vor Where
Me.RecordSource = strSQL
End Sub
DANK an alle die mir sooo viel geholfen haben !
Gruß
markus