String mit Datenbank vergleichen

Bamboocha_10

Mitglied
Ich habe gesucht, aber nichts gefunden.

Es gibt eine Datenbank mit Straßennamen. Ich habe nun einen dieser Straßennamen in einem String gespeichert. Allerdings kann es vorkommen, dass diese Straße nicht korrekt geschrieben ist.

Bsp:
Datenbankeintrag: Müllerstraße
Variable: Müllerstrasse; Müllerstr; Mueller oder gar
Mullerstra; Mülerstr oder auch
Muellerstraße/ Berlinerstraße; Muellerstraße 5; Ende Muellerstraße

Ist es möglich einen solchen Vergleich durchzuführen? z.B. das als Ausgabe die Prozentuale Übereinstimmung oder so etwas erfolgt.

Danke schon mal.
 
Bei Datenbankabfragen gibt es auch die Möglichkeit mit "LIKE" anstatt "AS" abzufragen.
Dazu findest Du im Netz bestimmt etwas... :)
Da bekommst Du aber meist mehrere Antworten, kannst aber mit "*" (Sternchen) arbeiten.
 
Ähm... wie kommst den Du an die Daten der Datenbank?
Benutzt Du mysql?
In Vb kannst Du Datenbanken in deine Progs. mit einbauen (direkt mit in die exe kompilieren oder extern). "Datenbanksprachen" find ich gut :). Um an die Daten eines Datensatzes in einer DB zu kommen, muss ich die Datenbank doch irgenwie "fragen" können. Da reden wir von einer Programmierzeile und raus kommt ein Ergebniss oder mehrere (siehe Googles). Diese "Frage" als Datenbanksprache zu bezeichnen ist dann aber doch etwas übertrieben :)
 
Zuletzt bearbeitet:
Oh ha. Also fang ich demnach falsch an Müsste ich mich erst darum kümmern die Daten aus der Datenbank zu bekommen. Daran hab ich gar nicht gedacht, dass ich ja dann mit dem LIKE Befehl arbeiten kann....

Ich bin mir noch nicht so sicher, was für eine Sprache das ist. Es handelt sich um Geodatenbanken in einem GIS-Programm. In diesem Programm ist VBA integriert. Von daher denke ich, dass man dann auch auf die Datenbanken (wie auch immer) zugreifen kann. Da muss ich wohl mal Handbücher des GIS Programmes wälzen.

Aber rein hypothetisch: Wenn ich die Straßen in einem Array hätte, gäb es dann von VB einen Befehl, mit dem ich diese Abfrage machen kann?
 
Ahh so langsam komme ich dahinter...

Vielleicht reicht da dieser Link
Ist auch like aber das "gelbe vom Ei" ist das für dich irgendwie noch nicht. Hmm...
Ich überleg nochmall...

Das sinnvollste ist es warscheinlich mit Like nach und nach die ersten Buchstaben einzugeben und sich laufend diese Ergebnisse anzeigenzulassen.
Also ne Textbox und im Keyup event sofort den Text1.Text mit der DB abgleichen und die Ergebnisse anzeigenlassen. Da sonderst Du zwar nur aus aber vielleicht hilft es ja.
 
Zuletzt bearbeitet:
Hallo,

der Like-Befehl hilft Dir dabei sicherlich nicht endgültig weiter, da hier zwar bei z.B. like uppercase('MUEL%' ) alle Muell, Mueller, Muellmann gefunden würden, jedoch keine Müller.

Aber vielleicht hilft Dir dieser Link ja weiter.

Viele Grüsse
Ronald
 
So, Teil 1. (den reinen Vergleich) hab ich gelöst.
Diesen habe ich nur etwas verfeinert:

Code:
Public Function Pruefen(ByVal pruefStr As String) As String

Dim pruefStr1 As String
Dim nrStr1 As String
Dim nrStr2 As String
Dim m As Integer

nrStr1 = ""
nrStr2 = ""

pruefStr = LCase(pruefStr)                  'alles in Kleinbuchstaben
pruefStr = Replace(pruefStr, "ae", "ä") 'ae wird gegen ä ersetzt
pruefStr = Replace(pruefStr, "oe", "ö") 'oe wird gegen ö ersetzt
pruefStr = Replace(pruefStr, "ue", "ü") 'ue wird gegen ü ersetzt

'wenn am Ende str, statt straße steht, wird es ersetzt
For m = 1 To Len(pruefStr)
  If InStr(m, pruefStr, "str") <> 0 Then 
    If m > (Len(pruefStr) - 4) Then     
    pruefStr1 = Mid(pruefStr, 1, m - 1) 
    pruefStr = Replace(pruefStr, "str", "straße", m, 1) 
    pruefStr = pruefStr1 + pruefStr      
    End If
  End If
Next

nrStr1 = Left(pruefStr, 1)             

'Jedem weiteren Buchstaben wird ein Wert zugewiesen
For m = 2 To Len(pruefStr)
  Select Case Mid(pruefStr, m, 1)
    Case "b", "f", "p", "v"
      nrStr1 = nrStr1 + "1"
    Case "c", "g", "j", "k", "q", "s", "x", "z"
      nrStr1 = nrStr1 + "2"
    Case "d", "t"
      nrStr1 = nrStr1 + "3"
    Case "l"
      nrStr1 = nrStr1 + "4"
    Case "m", "n"
      nrStr1 = nrStr1 + "5"
    Case "r"
      nrStr1 = nrStr1 + "6"
    Case "ß"
      nrStr1 = nrStr1 + "22"
    Case "w", "e"
      nrStr1 = nrStr1 + "8"
  End Select
Next
'alle anderen Buchstaben können ignoriert werden

nrStr2 = Left(pruefStr, 1)              

'alle direkt nummerischen Werte werden entfernt
For m = 2 To Len(nrStr1)
  If Mid(nrStr1, m - 1, 1) <> Mid(nrStr1, m, 1) Then
      nrStr2 = nrStr2 + Mid(nrStr1, m, 1)
    End If
  Next

  ' Und hier ist das Ergebnis
  Pruefen = nrStr2
End Function

Jetzt muss ich also in meiner Datenbank eine weitere Spalte einfügen, in der die Werte entsprechend der Straße abgepeichert sind, damit ich eine Abfrage starten kann. Kann man das irgendwie automatisieren? Oder muss ich das einzeln eintippen
 

Neue Beiträge

Zurück