Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Ihren XING-Kontakten zeigen

Diesen Beitrag Ihrem XING-Kontakten vorstellen

Diesen Beitrag auf Facebook teilen

Verwandte Beiträge:

Globale Suche

Fehlertolerantes Suchen

Suchformularassistent

Suchfunktionen von einfach bis komplex

Modale Dialoge mal anders

Alle verwandten Beiträge ansehen ...

Bisherige Kommentare:

Alle Kommentare ansehen oder Kommentar abgeben

Über den Autor:

André Minhorst

Bitte nutzen Sie das XING-Profil nicht
für Fragen zum Artikel, sondern nur für
den Kontaktaustausch beziehungsweise
Projekt- oder Supportanfragen.

Zusammenfassung

Erfahren Sie, wie Sie den Soundex-Algorithmus zum Suchen ähnlich lautender Namen verwenden.

Techniken

VBA

Voraussetzungen

Access 97 und höher

Beispieldateien

Soundex97.mdb, Soundex00.mdb

Suchfunktion mit phonetischem Vergleich

Martin Hoffmann, Düsseldorf; André Minhorst, Duisburg

Eine oft benötigte Funktion in einer Datenbank ist das Suchen nach bestimmten Daten. Dies lässt sich mit ein wenig Fleißarbeit leicht realisieren. Interessant wird es, wenn Sie die Suche mit zusätzlichem Komfort ausstatten möchten - etwa, indem Sie der Suchfunktion zusätzlich die Möglichkeit zum Suchen nach ähnlich klingenden Begriffen hinzufügen. Wie man das programmieren soll? Nun, das ist gar nicht schwer. Mit dem so genannten Soundex-Algorithmus erzeugen Sie aus Wörtern einen bestimmten Code, der nicht nur im Englischen, sondern auch im Deutschen verblüffend gute Ergebnisse liefert.

Der Soundex-Algorithmus

Knackpunkt der nachfolgend vorgestellten Suchfunktion ist der Soundex-Algorithmus, der aus einem Namen einen Code aus einem Buchstaben und drei Zahlen erzeugt. Der Algorithmus arbeitet nach den folgenden Regeln:

  • Das erste Zeichen ist der Anfangsbuchstabe des Begriffs.
  • Doppelte Buchstaben werden als einzelner Buchstabe betrachtet.
  • Die Vokale a, e, i, o und u und Umlaute werden genau wie y, w und h nicht beachtet, das scharfe s (ß) wird wie ein normales s behandelt.
  • Alle anderen Buchstaben werden in die in Tab. 1 angegebenen Zahlencodes umgewandelt, wobei bei zwei aufeinander folgenden Buchstaben mit gleichem Code der zweite verworfen wird.
  • Das Codieren erfolgt von links nach rechts. Sind vier Zeichen inklusive dem ersten Buchstaben erreicht, spielen die folgenden Buchstaben keine Rolle mehr. Reichen die relevanten Buchstaben hingegen nicht für einen Code von vier Zeichen aus, werden die restlichen Stellen mit der Ziffer 0 aufgefüllt.
  • Buchstabe

    Soundex-Code

    B, F, P, V

    1

    C, G, J, K, Q, S, X, Z

    2

    D, T

    3

    L

    4

    M, N

    5

    R

    6

    Tab. 1: Buchstaben und die entsprechenden Soundex-Codes

    Quellcode 1: Diese Funktion liefert den Soundex-Wert für eine Zeichenkette.

    Public Function Soundex(sfName As String) As String

      On Error GoTo Soundex_err

      '(c) mdb Solution 1998 (Dirk Bauer)

      Dim sfSoundex(3) As String

      Dim sfZeichen(2) As String, sfZeichenCode(2) As String, _
        sfNameNeu As String

      Dim iAnzZeichen As Integer, i As Integer

      Dim iPos As Integer, iZähler As Integer

      'Zeichenkette in Großbuchstaben umwandeln

      'und Blanks entfernen

      sfName = Trim(UCase(sfName))

      'Umlaute und Sonderzeichen ersetzen

      iPos = 1

      sfNameNeu = ""

      For i = 1 To Len(sfName)

        sfZeichen(0) = Mid(sfName, iPos, 1)

        Select Case Asc(sfZeichen(0))

            Case 192, 193, 194, 195, 196, 197, 198:   'Ä, Á...

            sfNameNeu = sfNameNeu & "AE"

            Case 210, 211, 212, 213, 214, 216:        'Ö...

            sfNameNeu = sfNameNeu & "OE"

            Case 217, 218, 219, 220:                  'Ü...

            sfNameNeu = sfNameNeu & "UE"

            Case 223:                                 'ß

            sfNameNeu = sfNameNeu & "SS"

            Case Is < 65:                             'Sonderzeichen 

            sfNameNeu = sfNameNeu

            Case Else: 'Zeichen ohne Änderung übernehmen

            sfNameNeu = sfNameNeu & sfZeichen(0)   

        End Select

        iPos = iPos + 1

      Next i

      sfName = sfNameNeu

      'Doppelte Zeichen entfernen

      iPos = 1

      sfNameNeu = ""

      For i = 1 To Len(sfName)

        sfZeichen(1) = Mid(sfName, iPos, 1)

        sfZeichen(2) = Mid(sfName, iPos + 1, 1)

        If sfZeichen(1) <> sfZeichen(2) Then

           ' Zeichen 2 ist NICHT doppelt, also schreiben...

           sfNameNeu = sfNameNeu & sfZeichen(1)

        End If

        iPos = iPos + 1

      Next i

      sfName = sfNameNeu

      'Benachbarte Zeichen auf identischen Zifferncode prüfen

      iPos = 1

      sfNameNeu = ""

      For i = 1 To Len(sfName)

        sfZeichen(1) = Mid(sfName, iPos, 1)

        sfZeichen(2) = Mid(sfName, iPos + 1, 1)

        'Code-Ziffer der beiden Zeichen ermitteln

        sfZeichenCode(1) = Soundex_CodeZiffer(sfZeichen(1))

        If sfZeichenCode(1) <> "KeinCode" And i <> Len(sfName)

          '1. Zeichen hat einen Code, also 2. Zeichen prüfen

          sfZeichenCode(2) = Soundex_CodeZiffer(sfZeichen(2))

    Beispiel: Bei der Suche nach dem Nachnamen "Meier" gibt Access in der Regel nur die Personen aus, bei denen die Schreibweise des Namens exakt identisch ist. Mit der Soundex-Suche werden auch Namen wie Mayer, Maier oder Meyer zurückgeliefert, da diese den gleichen Code haben.

    Der Code für alle Varianten lautet M600 - M ist der erste Buchstabe, a, y, i und e fallen aus der Wertung, also bleibt nur noch das r, das dem Zahlenwert 6 entspricht. Da keine weiteren Buchstaben vorhanden sind, wird der Code mit zwei Nullen aufgefüllt.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sie sind nicht angemeldet!
    Für den kompletten Artikel plus Beispieldatenbanken müssen Sie sich einloggen!
    Jetzt einloggen ...
     

    Sie haben keine Benutzerdaten? Na, dann aber schnell:

    Benutzerdaten erhalten Sie auf zwei Arten:

    1. Testen Sie das Online-Archiv von 'Access im Unternehmen' für eine Woche. Sie müssen Sie lediglich für den 'Access im Unternehmen'-Newsletter anmelden.
    Ja, ich will den einwöchigen Testzugang und den Newsletter!

    2. Greifen Sie ein ganzes Jahr auf das Online-Archiv zu und erhalten Sie zusätzlich alle zwei Monate das brandneue "Access im Unternehmen"-Magazin - für nur EUR 108,-* im Jahr!
    Ja, ich will Access im Unternehmen bestellen!

     

    * inkl. MwSt., zzgl. Versandkostenpauschale, EUR 140,- inkl. MwSt., zzgl. Versandkostenpauschale ab dem zweiten Jahr

    Verwandte Beiträge:

    Globale Suche

    Fehlertolerantes Suchen

    Suchformularassistent

    Suchfunktionen von einfach bis komplex

    Modale Dialoge mal anders

    Formulare im Blickpunkt

    Zugriff auf Formulare

    © 2003-2010 André Minhorst Alle Rechte vorbehalten.