Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: jeep_66 am September 15, 2010, 13:58:35

Titel: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 13:58:35
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: MzKlMu am September 15, 2010, 13:59:58
Hallo,
dann zeige bitte mal den Code, wie Du es mit dem ganzen Namen gemacht hast.
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 14:32:11
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: MzKlMu am September 15, 2010, 14:45:16
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


Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 15:05:05
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?
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: DF6GL am September 15, 2010, 15:13:46
Hallo,

ja....

niemand hat was von Leerzeichen um die Sternchen herum gesagt/geschrieben..


(btw:  die Str-Funktion könnte man auch weglassen)
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 20:11:49
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.
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: MzKlMu am September 15, 2010, 20:22:13
Hallo,
sorry, da hatte ich einen Fehler genacht.

rs.FindFirst "[Name1] Like '*" & Str(Me![Text244]) & "*'"
Vor dem Stern und nach dem Stern ein Hochkomma.
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 21:15:57
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 15, 2010, 21:33:31
.. noch eine Frage...
was ist denn, wenn mehrere Datensätze mit der Suchabfrage übereinstimmen würden?
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 15, 2010, 21:57:18
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: DF6GL am September 15, 2010, 22:02:10
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.
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 15, 2010, 22:41:30
Hallo,

na, sag ich doch!!

Gruß Oma
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: DF6GL am September 16, 2010, 09:09:07
Hi oma,

ja, aber erst, als ich schon am Schreiben war..   ;D
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: Bernie110 am September 16, 2010, 11:03:28
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 16, 2010, 11:36:20
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 16, 2010, 19:32:31
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 16, 2010, 19:56:10
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 16, 2010, 22:55:15
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 16, 2010, 23:07:48
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


Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: Bernie110 am September 17, 2010, 09:34:02
Off Topic

@ Oma , ich wollt doch auch mal helfen  ;D den Code gabst du mir vor ein paar Monaten bzw jahren  ;D
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 17, 2010, 10:30:06
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 17, 2010, 13:13:03
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: oma am September 17, 2010, 14:19:14
Hallo,

Ohne Worte ein kleines Beispiel....


Gruß Oma

[Anhang gelöscht durch Administrator]
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: DF6GL am September 17, 2010, 15:51:07
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
Titel: Re: Suchfunktion, mit Teilangaben
Beitrag von: jeep_66 am September 17, 2010, 19:23:41
DANK an alle die mir sooo viel geholfen haben !
Gruß
markus