Neuigkeiten:

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

Mobiles Hauptmenü

Ungebundes Kombinationsfeld als Suchfeld

Begonnen von ChemSim, Februar 12, 2024, 19:14:14

⏪ vorheriges - nächstes ⏩

ChemSim

Hallo zusammen,

in meiner Access-Datenbank gibt es eine Tabelle tblStandorte, in der verschiedene Standorte von Unternehmen gespeichert werden. Zudem habe ich ein Formular frmlStandorte erstellt, das es ermöglicht, neue Standorte hinzuzufügen oder bestehende zu bearbeiten. Gerade weil die Liste sehr lang werden wird, habe ich ein ungebundenes Kombinationsfeld cboSuche als Suchfeld erstellt. Das Kombinationsfeld hat als Herkunftstyp "Tabelle/Abfrage" eingestellt und als Datensatzherkunft greift es über die SQL-Abfrage

SELECT tblStandorte.StandortID, tblStandorte.Standort FROM tblStandorte ORDER BY tblStandorte.Standort;
auf die Tabelle Standorte zu, um in der Auswahl die Liste der alphabetisch sortierten Standorte anzuzeigen. Soweit funktioniert wie gesagt alles prima und ich kann mit dem Formular problemlos neue Standorte hinzufügen oder bearbeiten.

Mein Problem:

Da wie gesagt die Liste an Standorten bald sehr lang sein wird, möchte ich über das Suchfeld (Kombinationsfeld) schnell einen Standort suchen, um ihn zu bearbeiten. Allerdings funktioniert das bisher nur, wenn ich exakt die Anfangsbuchstaben eingebe. Als Beispiel kann der Ort "Ludwigshafen am Rhein" dienen. Das Kombinationsfeld findet den Standort, wenn ich "Ludw..." eingebe, allerdings nicht wenn ich "hafen" oder "Rhein" eingebe. Wie kann ich das umstellen, sodass auch Teile der Wörter oder Abfolgen von Buchstaben erkannt werden?

Gruß
ChemSim

Beaker s.a.

Hallo,

Dazu musst du zuerst die Eigenschaft "Automatisch ergänzen" auf "Nein" einstellen,
und die Eigenschaft "Bei Änderung" auf "Ereignisprozedur" stellen.
Dann fügst du folgende Ereignisprozedur in das Formmodul ein
Private Sub DeinKombi_Change()
    With Me
        If Len(.DeinKombi.Text) > 0 Then
            .DeinKombi.RowSource = _
            "SELECT StandortID, Standort " _
          & "FROM tblStandorte " _
          & "WHERE Standort LIKE '*" & .DeinKombi.Text & "*'"
          & "ORDER BY Standort"
        .DeinKombi.Dropdown
        End If
    End With
End Sub
Das mit dem .Dropdown scheint allerdings nicht zuverlässig zu funktionieren. Beim
ersten Testen hat's geklappt, dann nicht mehr. Zeigt beim Aufklappen aber immer
die gefilterten DS an.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ChemSim

Hallo Ekkehard,

sobald ich den Code (angepasst auf den Namen meines Kombinationsfeldes cboSuche):

Private Sub cboSuche_Change()

    With Me
        If Len(.cboSuche.Text) > 0 Then
            .cboSuche.RowSource = _
            "SELECT StandortID, Standort " _
          & "FROM tblStandorte " _
          & "WHERE Standort LIKE '*" & .cboSuche.Text & "*'"
          & "ORDER BY Standort"
        .cboSuche.Dropdown
        End If
    End With
   
End Sub

das Formular speichere und in die Suche gehe, bekomme ich einen Syntaxfehler.

Gruß
Simon

Beaker s.a.

Zitatbekomme ich einen Syntaxfehler.
So, so ..., soll ich mir einen ausdenken?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ChemSim

Hallo,

der Syntaxfehler wird nicht genau beschrieben:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Der Fehler tritt sowohl dann auf, wenn ich einen Eintrag aus dem Kombinationsfeld auswähle, als auch wenn ich versuche einen Buchstaben einzugeben.

Gruß,
Simon

MzKlMu

Hallo,
starte mal das Kompilieren über den VBA Editor direkt.
Gruß Klaus

ChemSim

Hallo,

wenn ich den Code direkt im VBA-Editor ausführen möchte

Sie dürfen in diesem Board keine Dateianhänge sehen.

ploppt dieses Feld auf:

Sie dürfen in diesem Board keine Dateianhänge sehen.

obwohl die richtige Datenbank ausgewählt ist.

Zitatdas Formular speichere und in die Suche gehe, bekomme ich einen Syntaxfehler.

Edit: So wie ich das sehe, hat er ein Problem mit der Zeile:

& "ORDER BY Standort"
Gruß
Simon 

Beaker s.a.

Der Fehler liegt an einem fehlenden Leerzeichen
& "WHERE Standort LIKE '*" & .cboSuche.Text & "*' "(ganz hinten das letzte)

Vielleicht sollte ich mein eigenes Tool öfter mal benutzen.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ChemSim

ZitatDer Fehler liegt an einem fehlenden Leerzeichen

Auch mit dem Leerzeichen funktioniert es bei mir nicht. Sobald ich in das Kombifeld klicke und was mache, kommt der Debugger des VBA-Editors und er markiert mir immer die Zeile

& "ORDER BY Standort"
als falsch?!

Beaker s.a.

Oh man, wie peinlich, da fehlt noch das Zeilenumbruchzeichen
& "WHERE Standort LIKE '*" & .cboSuche.Text & "*'" _
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ChemSim

Zitatda fehlt noch das Zeilenumbruchzeichen

Habe ich ergänzt und jetzt ist der vorherige Fehler weg. Wenn ich jetzt einen Standort auswähle, bekomme ich aber diesen Laufzeitfehler:

Sie dürfen in diesem Board keine Dateianhänge sehen.

und der Code stoppt hier:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Die Suche würde aber funktionieren und der Fehler kommt nur, wenn ich auf einen Standort klicke.

ChemSim

Hallo,

ich habe gerade etwas weiter an dem Fehler gesucht und der folgende Code funktioniert jetzt:

Private Sub cboSuche_Change()
    With Me
        .cboSuche.SetFocus ' Setze den Fokus auf das Steuerelement
        If Len(.cboSuche.Text) > 0 Then
            .cboSuche.RowSource = _
                "SELECT StandortID, Standort " _
                & "FROM tblStandorte " _
                & "WHERE Standort LIKE '*" & .cboSuche.Text & "*'" _
                & "ORDER BY Standort"

            .cboSuche.Dropdown
        End If
    End With
End Sub

Ich habe noch die Zeile

.cboSuche.SetFocus ' Setze den Fokus auf das Steuerelement
eingefügt.

Gruß,
Simon

ebs17

Eine kleine Zusatzbetrachtung. Das Change-Event ist sehr dynamisch. Bei größeren Datenmengen und schlechteren Netzwerkverbindungen kann dass jeweilige Neuladen sehr anstrengend und inperformant sein, zumal die verwendete Filterung per Mustersuche keine Indexnutzung bietet.

Eine kleine Entspannung könnte es da sein, wenn man die RowSource der ComboBox anfangs leer lässt und erst nach Eingabe mehrerer Zeichen das Laden beginnt. Etwa
If Len(.cboSuche.Text) > 3 Then
   sWhere = "WHERE Standort LIKE '*" & .cboSuche.Text & "*'"
Else
   sWhere = "WHERE False"
End If
Mit freundlichem Glück Auf!

Eberhard

ChemSim

Hallo,

der Code

Private Sub cboSuche_Change()
    With Me
        .cboSuche.SetFocus ' Setze den Fokus auf das Steuerelement
        If Len(.cboSuche.Text) > 3 Then
            sWhere = "WHERE Standort LIKE '*" & .cboSuche.Text & "*'"
        Else
             sWhere = "WHERE False"
        End If
    End With
End Sub

funktioniert bei mir leider nicht, daher lasse ich es so.

Gruß,
Simon

Beaker s.a.

Das mit dem Focus verstehe ich zwar nicht. Das Control muss doch den Focus
haben wenn das Change-Ereignis getriggert wird.
Ansonsten kannst du auch im funktionierenden Code erst ab dem 3. Zeichen
anfangen zu filtern.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)