![]() |
||
![]() |
Access durchsucht mehrere FelderIch habe eine Access-Datenbank mit einem Adre▀formular, das die Eingabefelder Stra▀e und Postleitzahl enthΣlt. Wenn ich eine Stra▀e oder Postleitzahl eingebe, soll Access beim Anklicken der SchaltflΣche Suchen die gefundenen DatensΣtze anzeigen. Wie erreiche ich, da▀ Access mehrere Felder durchsucht? Die L÷sung fⁿr die gewⁿnschte Suchfunktion erreichen Sie in zwei Schritten: ZunΣchst brauchen Sie eine SQL-Abfrage, die Ihre Access-Datenbank nach Stra▀en oder Postleitzahlen durchsucht. Im zweiten Schritt bringen Sie Access dazu, die gefundenen Daten im Formular anzuzeigen. Wonach Access suchen soll, definieren Sie in der WHERE-Klausel des SQL-Befehls. Im folgenden Beispiel sucht Access im Postleitzahlengebiet 96 nach allen Stra▀en, die mit Hauptstr beginnen: SELECT * FROM Adressen WHERE Plz LIKE ô96*ô AND Strasse LIKE ôHauptstr*ôWenn Sie mehrere Felder Ihrer Datenbank durchsuchen wollen, k÷nnen Sie in der WHERE-Klausel mehrere Suchkriterien mit dem AND-Operator verbinden. Im obigen Beispiel findet Access nur Adressen, deren Postleitzahl mit 96 beginnt und deren Stra▀e mit Hauptstr anfΣngt. Das Sternchen im Suchbegriff ist ein Platzhalter, der dafⁿr sorgt, da▀ Access nur nach den Anfangsbuchstaben sucht. Daher findet die Abfrage sowohl die Hauptstra▀e als auch die abweichende Schreibweise Hauptstrasse. Nachdem Sie den SQL-Befehl definiert haben, stellt sich die Frage, wie die von Access gefundenen Adressen ins Formular gelangen. Die einfachste L÷sung fⁿr dieses Problem ist die RecordSource-Eigenschaft des Formulars. Die RecordSource-Eigenschaft bestimmt, welche Daten die Steuerelemente des Formulars anzeigen. Sie k÷nnen an dieser Stelle entweder den Namen einer Tabelle auswΣhlen, um alle Daten der Tabelle anzuzeigen, oder einen SQL-Befehl eingeben. Der SQL-Befehl hat den Vorteil, da▀ Sie eine WHERE-Klausel mit beliebigen Bedingungen fⁿr die Suchfunktion definieren k÷nnen. Das im Kasten äVBA-String...ô abgedruckte VBA-Programm (WIN-CODE: ABFRAGE) ist das Ereignis Beim Klicken des Buttons ▄bernehmen. Das Programm generiert einen SQL-Befehl, der entweder nach einer Stra▀e, einer Postleitzahl oder nach beidem sucht. Da der SQL-Befehl als RecordSource-Eigenschaft des Formulars gespeichert wird, zeigt Access in diesem Formular nur das Ergebnis der Abfrage an. Beachten Sie, da▀ ein VBA-String direkt nebeneinanderstehende Anfⁿhrungszeichen nicht akzeptiert. Deshalb werden diese Anfⁿhrungszeichen durch die Funktion Chr(34) ersetzt. Au▀erdem darf in der WHERE-Klausel kein leeres Suchwort vorkommen, weil Access sonst keine Daten findet. Aus diesem Grund unterscheidet die If-ElseIf-Konstruktion die Suche nach einer Postleitzahl, einer Stra▀e und nach beiden Kriterien. VBA-String zum Durchsuchen mehrerer Felder in Access Private Sub SchaltflΣche_Click () If (StrasseSuche.Value <> ô ô) And (PlzSuche.Value <> ô ô) Then Me.RecordSource = ôselect Adressen.* from Adressen where Adressen.Strasse likeô _ & Chr (34) & StrasseSuche.Value & ô*ô & Chr (34) & _ ôand Adressen.Plz likeô & Chr (34) & PlzSuche.Value & ô*ô & Chr (34) & ô;ô ElseIf StrasseSuche.Value <> ô ô Then Me.RecordSource = ôselect Adressen.* from Adressen where Adressen.Strasse likeô _ & Chr (34) & StrasseSuche.Value & ô*ô & Chr (34) & ô;ô ElseIf PlzSuche.Value <> ô ô Then Me.RecordSource = ôselect Adressen.* from Adressen where Adressen.Plz likeô _ & Chr (34) & PlzSuche.Value & ô*ô & Chr (34) & ô;ô Else Me.RecordSource = äôselect Adressen.* from Adressen;ô End If WIN-CODE: ABFRAGE |
![]() |