Global strSQL As String
Public Function SoundEx(ByVal WordString As String, _
Optional SoundExLen As Integer = 3) As String
Dim Counter As Integer
Dim CurrChar As String
If SoundExLen > 10 Then
SoundExLen = 10
ElseIf SoundExLen < 3 Then
SoundExLen = 3
End If
SoundExLen = SoundExLen - 1
WordString = UCase(WordString)
For Counter = 1 To Len(WordString)
If Asc(Mid(WordString, Counter, 1)) < 65 Or _
Asc(Mid(WordString, Counter, 1)) > 90 Then
Mid(WordString, Counter, 1) = " "
End If
Next Counter
WordString = Trim(WordString)
If Len(Trim(WordString)) = 0 Then
SoundEx = ""
Else
SoundEx = WordString
SoundEx = Replace(SoundEx, "A", "0")
SoundEx = Replace(SoundEx, "E", "0")
SoundEx = Replace(SoundEx, "I", "0")
SoundEx = Replace(SoundEx, "O", "0")
SoundEx = Replace(SoundEx, "U", "0")
SoundEx = Replace(SoundEx, "Y", "0")
SoundEx = Replace(SoundEx, "H", "0")
SoundEx = Replace(SoundEx, "W", "0")
SoundEx = Replace(SoundEx, "B", "1")
SoundEx = Replace(SoundEx, "P", "1")
SoundEx = Replace(SoundEx, "F", "1")
SoundEx = Replace(SoundEx, "V", "1")
SoundEx = Replace(SoundEx, "C", "2")
SoundEx = Replace(SoundEx, "S", "2")
SoundEx = Replace(SoundEx, "G", "2")
SoundEx = Replace(SoundEx, "J", "2")
SoundEx = Replace(SoundEx, "K", "2")
SoundEx = Replace(SoundEx, "Q", "2")
SoundEx = Replace(SoundEx, "X", "2")
SoundEx = Replace(SoundEx, "Z", "2")
SoundEx = Replace(SoundEx, "D", "3")
SoundEx = Replace(SoundEx, "T", "3")
SoundEx = Replace(SoundEx, "L", "4")
SoundEx = Replace(SoundEx, "M", "5")
SoundEx = Replace(SoundEx, "N", "5")
SoundEx = Replace(SoundEx, "R", "6")
CurrChar = Left(SoundEx, 1)
For Counter = 2 To Len(SoundEx)
If Mid(SoundEx, Counter, 1) = CurrChar Then
Mid(SoundEx, Counter, 1) = " "
Else
CurrChar = Mid(SoundEx, Counter, 1)
End If
Next Counter
SoundEx = Replace(SoundEx, " ", "")
SoundEx = Mid(SoundEx, 2)
SoundEx = Replace(SoundEx, "0", "")
SoundEx = SoundEx & String(SoundExLen, "0")
SoundEx = Left(WordString, 1) & Left(SoundEx, SoundExLen)
End If
End Function
Public Function StripNonNumeric(txtInput As String) As Integer
Dim intCounter As Integer
Dim txtTemp As String
For intCounter = 1 To Len(txtInput)
Select Case Mid(txtInput, intCounter, 1)
Case "0" To "9"
txtTemp = txtTemp & Mid(txtInput, intCounter, 1)
End Select
Next
StripNonNumeric = Trim(txtTemp)
End Function
Public Function BuildQueryCommand(tmpSurname As String, tmpFirstname As String, tmpListType As String) As String
Dim txtFirstOp As String, txtSecondOp As String
txtFirstOp = "LIKE"
txtSecondOp = "LIKE"
If Trim(tmpSurname) <> "" Then
tmpSurname = CutSurName(tmpSurname)
End If
If Trim(tmpFirstname) <> "" Then
tmpFirstname = CutOtherNames(tmpFirstname)
End If
strSQL = "SELECT ID, Name, ListType, Register FROM tblSearchList WHERE "
If Not IsNull(tmpSurname) Then
Call AttachAnd("Cutsurname([Name])", Chr(39) & tmpSurname, txtFirstOp, True)
tmpFirstname = Trim(tmpFirstname)
If Trim(tmpFirstname) <> "" Then
Call AttachAnd("CutOtherNames([Name])", Chr(39) & "*" & tmpFirstname & Chr(39), txtSecondOp, True)
End If
Else
Call AttachAnd("CutOtherNames([Name])", Chr(39) & "*" & tmpFirstname & Chr(39), txtSecondOp, True)
End If
tmpListType = Trim(tmpListType)
If Trim(tmpListType) <> "" Then
Call AttachAnd(tmpListType, Chr(39) & UCase(tmpListType) & Chr(39), "=", False)
End If
End Function
Public Function BuildSoundexQueryCommand(tmpSurname As String, tmpFirstname As String, tmpListType As String) As String
strSQL = "SELECT ID, Name, ListType, Register FROM tblSearchList WHERE "
If Not IsNull(tmpSurname) Then
Call AttachAnd("soundex(cutsurname(tmpsurname), 4)", Chr(39) & SoundEx(tmpSurname, 4) & Chr(39), "=", False)
Else
Call AttachAnd("soundex(cutothernames(tmpfirstname), 4)", Chr(39) & SoundEx(tmpFirstname, 4) & Chr(39), "=", False)
End If
If Not IsNull(tmpListType) Then
Call AttachAnd(tmpListType, Chr(39) & tmpListType & Chr(39), "=", False)
End If
End Function
Function AttachAnd(sField, sValue, sOperator, sWild As Boolean)
If sValue = "''" Or sValue = "" Then
Exit Function
End If
If Occurances(strSQL, "=") = 0 And Occurances(strSQL, "LIKE") = 0 Then
strSQL = strSQL & sField & " " & sOperator & " " & sValue
Else
strSQL = strSQL & " AND " & sField & " " & sOperator & " " & sValue
End If
If sWild Then
strSQL = strSQL & "*" & Chr(39)
Else
strSQL = strSQL & Chr(39)
End If
End Function
Function Occurances(tsql, sOperator)
Dim offset
Dim iCount
offset = 1
While offset <> 0
offset = InStr(offset + 1, tsql, sOperator)
If offset > 1 Then
iCount = iCount + 1
End If
Wend
Occurances = iCount
End Function