Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Suche in mehreren Spalten des Kombinationsfeldes

Begonnen von Danielz, Februar 09, 2018, 13:47:20

⏪ vorheriges - nächstes ⏩

Danielz

Hallo,
ich hab ein Formular mit einem Unterformular. Im Hauptformular gebe ich persönliche Kontaktdaten einer Person ein. Im Ufo teile ich dieser Person dann über ein Kombinationsfeld eine Firma zu. Dieses Kombinationsfeld hat mehrere Spalten (Name der Firma, Abkürzung, Zusatz, Straße, Ort, etc.). Jetzt würde ich gerne bei einer Eingabe im Kombinationsfeld alle Spalten durchsuchen können. Wenn mir beispielsweise als Anwender nur die Abkürzung der Firma/Organisation einfällt, z.B. "BMBF" dann soll mir trotzdem die richtige Zeile angezeigt werden. Momentan ist es nur möglich eine der Zeilen zu durchsuchen.
Weiß Jemand für mein Problem eine Lösung? Vielen Dank im Voraus und beste Grüße
Daniel

Beaker s.a.

Hallo Daniel,
Ein vorgeschaltetes Kombi könnte helfen.
In dem zeigst du die relevanten Spalten zur Auswahl an und AfterUpdate
manipulierst du die RowSource des Suchkombis entsprechend.
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)

Danielz

Hallo Ekkehard,
vielen Dank für Deine Hilfe! Allerdings bin ich mit meinem Problem leider noch nicht weitergekommen.
Ich habe jetzt allerdings versucht mit einem vorgeschalteten ungebunden Textfeld, das als Suchfeld für das nachfolgende Kombi dient, mein Problem zu lösen. Dafür habe ich den nachfolgenden Code "bei Änderung" eingetragen. Bis jetzt ist damit allerdings auch nur die erste Spalte des Kombis durchsuchbar. Gibt es die Möglichkeit für "Dim Kriterium as String" mehrere Kriterien zu hinterlegen, so dass man auch noch nach Spalte zwei und drei des Kombis suchen kann?   
Viele Grüße
Daniel
Private Sub ogrSuchart_AfterUpdate()
    ArtikelSuchen
End Sub

Private Sub ArtikelSuchen()
    Dim strKriterium As String
    If Me!ogrSuchart = 1 Then
        strKriterium = "Institution LIKE  '" & strSuchbegriff & "*'"
    Else
        strKriterium = "Institution LIKE '*" & strSuchbegriff & "*'"
    End If
    Me!IstInstitution.RowSource = "SELECT Institutionen_Nr, Institution FROM Testabfrage WHERE " & strKriterium & " ORDER BY Institution"
End Sub

Private Sub txtSuche_Change()
    strSuchbegriff = Me!txtSuche.Text
    ArtikelSuchen

End Sub
[/size][/size]

Beaker s.a.

Hallo Daniel,
Anbei ein Minimalbeispiel wie es gehen könnte.
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)

Josef P.

Hallo!

Wenn eine Textsuche ausreicht, ist vielleicht auch die Eingabe des Suchwertes in die Combobox eine Option.
Beispiel: ComboboxFilterControlTest

mfg
Josef

DF6GL

Hallo,


auch eine (einfache) Möglichkeit:


Private Sub txtSuche_Change()
     Me!IstInstitution.RowSource = "SELECT InstitutionName, Abkürzung, Zusatz, Straße, Ort  FROM tbl_Institutionen WHERE " & _
    "  InstitutionName & "|" & Abkürzung & "|" & Zusatz & "|" & Straße & "|" & Ort Like '*" &  Me!txtSuche.Text  & "*' ORDER BY InstitutionName"
End Sub

Danielz

Hallo Franz,

ich habe gerade erst deine Antwort gesehen. Wenn ich deine Möglichkeit ausprobiere bekomme ich einen Fehler bezüglich der senkrechten Striche | , was genau sollen die bewirken? Kann ich die evtl. weglassen?

Viele Grüße
Daniel

Beaker s.a.

Hallo Daniel,
Es liegt wohl an einem kleinen Tippfehler von Franz
Zitat"  InstitutionName & "|" & Abkürzung & "|" & Zusatz & "|" & Straße & "|" & Ort Like '*" &  Me!txtSuche.Text  & "*' ORDER BY InstitutionName"
Na ja, schwer zu erkennen; - das erste " muss weg.
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)

Beaker s.a.

Uuups, noch mal nachgezählt, - kann's also nicht sein. Sorry.
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)

Lachtaube

Die Feldinhalte musst Du schon in der Bedingung trennen, damit kein absoluter Kuddelmuddel entsteht. Zur Trennung empfieht sich ein Zeichen zu nehmen, dass in keinem der Felder selbst vorkommt. Franz hat dafür das Pipe-Zeichen (|) veranschlagt, was Du natürlich auch austauschen kannst. Ist das gewählte Zeichen nicht innerhalb der in der Windows-Systemsteuerung eingestellten Codepage für nicht-Unicode fähige Programme (dazu zählt der VBA-Editor im Jahr 2018 leider immer noch) verfügbar (das ist hierzulande normalerweise die Windows Codepage 1252), so kann das Trennzeichen auch mittels der Funktion ChrW() eingetragen werden. Ich verwende in ähnlichen Situationen oft Chr(255) => (ÿ), was in deutschen Texten nicht vorkommt.

Private Sub txtSuche_Change()
   Me.IstInstitution.RowSource = _
      "SELECT InstitutionName," & vbLf & _
      "       Abkürzung," & vbLf & _
      "       Zusatz," & vbLf & _
      "       Straße," & vbLf & _
      "       Ort" & vbLf & _
      "FROM   tbl_Institutionen" & vbLf & _
      "WHERE  InstitutionName & '|' & Abkürzung & '|' & Zusatz & '|' & Straße & '|' & Ort" & _
      "       Like '*" & Me!txtSuche.Text & "*'" & vbLf & _
      "ORDER  BY 1"
   'vollkommen gleichwertig ist; Chr$(124) => |
   Me.IstInstitution.RowSource = _
      "SELECT InstitutionName," & vbLf & _
      "       Abkürzung," & vbLf & _
      "       Zusatz," & vbLf & _
      "       Straße," & vbLf & _
      "       Ort" & vbLf & _
      "FROM   tbl_Institutionen" & vbLf & _
      "WHERE  InstitutionName & Chr$(124) &" & vbLf & _
      "       Abkürzung & Chr$(124) &" & vbLf & _
      "       Zusatz & Chr$(124) &" & vbLf & _
      "       Straße & Chr$(124) &" & vbLf & _
      "       Ort" & _
      "       Like '*" & Me.txtSuche.Text & "*'" & vbLf & _
      "ORDER  BY 1"
End Sub


Siehe auch Anführungszeichen und Apostrophe auf DBWiki.
Grüße von der (⌒▽⌒)