Freitext-Suche bringt Fehler

Moderator: ModerationP

Freitext-Suche bringt Fehler

Beitragvon accessGast » 16. Jan 2018, 07:44

Hallo und Guten Morgen
Ich habe ein Problem mit meiner Freitext-Suche.

Gebe ich einen Suchbegriff ein, der in der Datenbank vorhanden ist, funktioniert die Suche problemlos. Mehr Zeichen im Suchbegriff, schränkt das Ergebnis ein, weniger Zeichen vergrößert die Datensätze im angezeigten Endlosformular.

Wenn ich aber ein Wort eingebe, welches es in dem Suchstring nicht gibt, kommt ein Fehler. (Laufzeitfehler 2185) Aber ich finde einfach das Problem nicht. Ich habe in einer anderen DB den gleichen Aufbau. Dort kann ich sonst was eingeben und er bringt keinen Fehler. Hat vielleicht jemand eine Idee, was in dem Code dafür verantwortlich sein könnte? Datenherkunft ist eine Abfrage mit einem zusammengesetzten Feld aus "allen" Feldern, worin dann gesucht wird.
Was auch ein Problem ist, wenn man dieser Fehler erscheint und man möchte dann Zeichen für Zeichen aus dem txt_SuBegriff löschen, erscheint bei jedem Zeichen was man weg nimmt wieder der Laufzeitfehler. Bis alle Zeichen raus sind.
Der Debugger markiert dann die Zeile If Not Len.....

Code: Alles auswählen
Private Sub txt_SuBegriff_Change()
Dim strFilter As String
    Dim intStart As Integer
    intStart = Me!txt_SuBegriff.SelStart
    If Not Len(Me!txt_SuBegriff.Text) = 0 Then
        strFilter = "SuchFeld Like '*" & Me!txt_SuBegriff & "*'"
         Me.Filter = strFilter
        Me.FilterOn = True
        Me!txt_SuBegriff.SelStart = intStart
    Else
        Me.Filter = ""
        Me.FilterOn = False
        Me!txt_SuBegriff.SetFocus
    End If
End Sub
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Re: Freitext-Suche bringt Fehler

Beitragvon mmarkus » 16. Jan 2018, 11:13

Das was aus meiner Sicht zu einem Problem führt ist, die Anweisung:

strFilter = "SuchFeld Like '*" & Me!txt_SuBegriff & "*'"

Weil du hier auf Value statt auf Text zugreifst.
Hier also mit einer kleinen Änderung.
Falls du den With Operator nicht kennst, ist es vielleicht etwas verwirrend.

Code: Alles auswählen
Private Sub txt_SuBegriff_Change()
    Dim intStart As Integer
   
    With txt_SuBegriff
        intStart = .SelStart
        If Not Len(.text) = 0 Then
            Me.Filter = "SuchFeld Like '*" & .text & "*'"
            Me.FilterOn = True
            .SelStart = intStart
        Else
            Me.Filter = ""
            Me.FilterOn = False
            .SetFocus
        End If
    End With
End Sub
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1254
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Freitext-Suche bringt Fehler

Beitragvon Joss » 16. Jan 2018, 11:43

Du kannst auch im DBWiki mal nachschauen.
http://dbwiki.net/wiki/VBA_Tipp:_Suchen_(Filtern)_im_Endlosformular

Gruß
Josef
Meine Suchmaschine: www.fireball.de | Access-Wiki: www.dbwiki.de
Joss
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 161
Registriert: 20. Okt 2012, 11:38

Re: Freitext-Suche bringt Fehler

Beitragvon accessGast » 16. Jan 2018, 12:46

Hallo Joss

Vielen Dank für die Reaktion.
Ich werde mir das in DBWiki noch einmal genau anschauen.

Hab es jetzt mit Deinem Code versucht. Leider das gleiche Problem. Sobald man drei Zeichen eingibt, die es in der Zusammenfolge so nicht gibt, meckert er bei jedem Zeichen was man hinzufügt oder wieder aus dem Suchfeld wegnehmen möchte. "Laufzeitfehler 2185 Sie können auf die Eigenschaften oder Methoden eines Steuerelements nur verweisen, wenn das Steuerelement den Fokus hat"
Bsp.:
txt_SuBegriff: Schrank.. findet Kleiderschrank, Anstellschrank, Aktenkleiderschrank
txt_SuBegriff: Wand... findet Aktenkleiderschrank, Schrankwand, Schiebetürenschrank

txt_SuBegriff: scr (die Kombi kommt als Wort nirgends vor) fängt er ab dem "r" mit dem Laufzeitfehler an. Den bestätige ich mit Debuggen...

Dann ist diese Zeile im Code markiert:

Code: Alles auswählen
.SelStart = intStart


Editor schließen, okay.. Ist das Suchformular weiterhin leer und wenn ich in das Suchfeld reinklicke, um den letzten der drei Buchstaben das "r" wegzunehmen.. kommt beim wegnehmen sofort wieder Laufzeitfehler
dann jedoch mit dieser Zeile markiert:

Code: Alles auswählen
 If Not Len(.Text) = 0 Then


Das ganze macht er dann so lange bis alle drei Buchstaben raus sind... Obwohl er ja ursprünglich bei den Buchstaben "sc" ja noch Ergebnisse anzeigt

Kann es manchmal auch an dem Formular liegen? Das Ereignis "bei Änderung" ist doch aber auch richtig, oder? Denn der ursprüngliche Code funktioniert ja in einer anderen Datenbank probemlos. Wobei es dort ja auch nur ein Feld ist und nicht ein aus der Abfrage zusammen gesetztes Feld. Kann das manchmal der Grund sein? Das immer der Laufzeitfehler ausgegeben wird?
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Re: Freitext-Suche bringt Fehler

Beitragvon accessGast » 17. Jan 2018, 14:34

Hallochen

Ich wollte mich noch einmal bedanken. Der Tipp mit der DBWiki war spitze. Habe mein Suchformular jetzt nach diesem Beispiel angepasst. Funktioniert super.

Kurz noch einmal zu meiner Problematik vorher. Ich habe festgestellt, dass wenn ich als Grundlage für die Daten eine Tabelle nehme, hat es ohne Laufzeitfehler funktioniert, nehme ich eine Abfrage (auch wenn ich eine neue erstelle) passiert der Fehler wieder.

Also noch einmal vielen Dank Joss,
für die Unterstützung und die Tipps.
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Suche über Textfeld lässt keine Leerzeichen zu

Beitragvon accessGast » 05. Feb 2019, 14:20

Hallo
Ich möchte dieses Thema noch einmal aufgreifen. Die Suche funktioniert grundsätzlich. Jedoch kann ich keine Leerzeichen mitgeben.

Wenn ich in das Suchfeld eingebe XY 111 wird das mit 2185 quittiert, jedoch über Msg abgefangen.
Wenn ich in das Suchfeld eingebe XY*111 wird neben dem richtigen Artikel auch ähnliche angezeigt.

Ich möchte aber gern erreichen, dass ich in das Suchfeld eingebe XY 111 und er dann auch diesen oder ähnliche Artikel angezeigt bekomme. Das Suchfeld befindet sich im Formularkopf eines Endlosformulars. Herkunft ist eine Abfrage.

der Code ist wie folgt aufgebaut
Code: Alles auswählen
Private Sub txt_SuBegriff_Change()

On Error GoTo Fehler ' Fehlerbehandlung wenn keine Übereinstimmung
' Freie Suche - zeigt alles an, wo das Wort im Titel (LinkBez) enthalten ist
Dim strFilter As String

   
    Dim intStart As Integer

    intStart = Me!txt_SuBegriff.SelStart
   
   

    If Not Len(Me!txt_SuBegriff.Text) = 0 Then

       
       
        strFilter = "artikelbezeichnung Like '*" & Me!txt_SuBegriff.Text & "*'"
       
        Me.Filter = strFilter

        Me.FilterOn = True

        Me!txt_SuBegriff.SelStart = intStart

    Else

        Me.Filter = ""

        Me.FilterOn = False

        Me!txt_SuBegriff.SetFocus

    End If
Fehler:     ' Fehlerbehandlung wenn keine Übereinstimmung
     'MsgBox Err.Number
     If Err.Number = 2185 Then ' betreffender Fehlercode
     
     If MsgBox("Keine Übereinstimmung. Eine neue Suche durchführen?", vbYesNo, "XYZ") <> vbYes Then Exit Sub

 'danach
 
Me.FilterOn = False
Me!txt_SuBegriff = ""
Me!txt_SuBegriff.SetFocus
     
     Else
   
     
     
     End If
     
     

End Sub
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Re: Freitext-Suche bringt Fehler

Beitragvon SGast » 05. Feb 2019, 14:47

Hallo,
ich kann nicht "erkennen", dass das Leerzeichen bei Like eine "Sonderstellung" einnimmt.

Logischste Erklärung:
- es sind mehrere Leerzeichen dazwischen
- es ist kein "richtiges" Leerzeichen

Gruß Steffen
SGast
 

Re: Freitext-Suche bringt Fehler

Beitragvon accessGast » 05. Feb 2019, 15:01

Hallo SGast,

naja "richtiges" Leerzeichen. Beim Erfassen wird XY(Leertaste)111 geschrieben.
Aber das Suchfeld lässt keine Leertaste zu. Bei der Eingabe setzt Access alles aneinander und bringt dann - mangels Übereinstimmung - eben den abgefangenen Fehler.
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Re: Freitext-Suche bringt Fehler

Beitragvon SGast » 05. Feb 2019, 15:32

Hallo,
ok, jetzt verstehe ich das Problem.
Durch den Zugriff auf den Filter wird das Leerzeichen am Ende gelöscht.

Mir fällt auf die Schnelle dann nur die exotische Variante mit dem Austauschen in ein "falsches" Leerzeichen ein:
Code: Alles auswählen
' ...
        strFilter = "artikelbezeichnung Like '*" & Replace(Me!txt_SuBegriff.Text, Chr(&HA0), " ") & "*'"
        Me!txt_SuBegriff.Text = Replace(Me!txt_SuBegriff.Text, " ", Chr(&HA0))
        Me.Filter = strFilter
        Me.FilterOn = True
' ....


Gruß Steffen
SGast
 

Re: Freitext-Suche bringt Fehler

Beitragvon accessGast » 05. Feb 2019, 15:45

Hallo SGast,

so funktioniert die Suche auch mit einem Leerzeichen ohne Probleme. Allerdings benötigt er jetzt nach Eingabe eines jeden einzelnen Zeichens mehrere Sekunden bis er das Ergebnis liefert.

Also X "Warten, warten, warten, warten" Y "Warten, warten, warten" (Leerzeichen) "Warten, warten, warten ..usw...

Ansonsten wäre das die perfekte Lösung. Nur wenn nach jeder Eingabe eines Zeichens der Kreisel erst einmal 3 Sekunden kreiselt, bis man die nächste Eingabe tätigen kann, ist das irgendwie nicht zumutbar.

Kann man das noch irgendwie unterbinden?
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13

Re: Freitext-Suche bringt Fehler

Beitragvon Beaker s.a. » 05. Feb 2019, 15:54

Hallo,
Brauchst du den die Aktualisierung nach jedem Buchstaben?
Vielleicht reicht es ja den Filter erst "After_Update" zu setzen.
gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 477
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Suche mit Leerzeichen wird nicht zugelassen

Beitragvon accessGast » 05. Feb 2019, 16:12

Hallo SGast und hallo ekkehard

Vermutlich lag das Problem in der Deklaration. ("As Boolean" hat gefehlt)
Und ich habe noch einmal einen etwas anderen Ansatz verwendet. Aber nur hierdurch hab ich dort hin gefunden.
Jetzt funktioniert es zu 100%. Vielen Dank für Eure Unterstützung und Anregung.

Code: Alles auswählen
Option Explicit

Dim Sic As Boolean

 Private Sub txt_SuBegriff_Change()
 
 On Error GoTo Fehler ' Fehlerbehandlung wenn keine Übereinstimmung
 
 Dim Such As String
 
 If Sic Then Exit Sub

 Such = Replace(Me![txt_SuBegriff].Text, Chr(160), " ")

 Sic = True
 Me![txt_SuBegriff].Text = Replace(Me![txt_SuBegriff].Text, " ", Chr(160))
 Sic = False

 Filter = "artikelbezeichnung like '*" & Such & "*'"
 FilterOn = True
 Me!txt_SuBegriff.SelStart = Len(Nz(Me!txt_SuBegriff.Text))
 



Fehler:     ' Fehlerbehandlung wenn keine Übereinstimmung
     'MsgBox Err.Number
     If Err.Number = 2196 Then ' betreffender Fehlercode
     
     If MsgBox("Keine Übereinstimmung. Eine neue Suche durchführen?", vbYesNo, "Laufzeitfehler 2196") <> vbYes Then Exit Sub

 'danach
 
Me.FilterOn = False
Me!txt_SuBegriff = ""
Me!txt_SuBegriff.SetFocus
     
    Else
   
     
     
     End If
     

     
     

End Sub
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 83
Registriert: 20. Apr 2016, 11:13


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste