2011-04-29 60 views
1

我需要搜索以查找Surname時搜索數據庫中的「模糊匹配」。我已經實現了以下功能來啓用沒有問題的SoundEx功能。MS Access 2003使用SoundEx從表格中搜索

當談到構建SQL以通過調用SoundEx函數的數據庫進行搜索時,我遇到了問題。我知道VBA函數可以在SQL語句中調用,但它似乎沒有正常工作。

Private Sub cmdSearch_Click() 

Dim LSQL As String 
Dim LSearchString As String 

If Len(txtSearchString) = 0 Or IsNull(txtSearchString) = True Then 
    MsgBox "You must enter a search string." 

Else 
    LSearchString = txtSearchString 
    LSQL = "SELECT * FROM TVictim " 
    LSQL = LSQL & "WHERE Soundex([Victim Surname]) = " & Soundex(LSearchString) & ";" 

    frmVictim.Form.RecordSource = LSQL 


    lblTitle.Caption = "Matching Victim Details: Filtered by '" & LSearchString & "'" 
    txtSearchString = "" 

    MsgBox "Results have been filtered. All Victim Names containing " & LSearchString & "." 

End If End Sub 

當我輸入窗體上的字符串,然後單擊該按鈕時,我已經經歷了加強,並且該點處,它能增強SQL,它與文本搜索的SOUNDEX輸出命令窗口拋出了框和另一個數據輸入框。

已經擺弄這一段時間,似乎無法找到一個有用的例子。

+0

性能方面,它是存儲在數據表中的SOUNDEX值是一個好主意,因爲這時可以將它們編入索引,從而大大您使用它們加快搜索速度。另外請注意,花園多樣的Soundex()是一個非常模糊的匹配,只適用於某些語言的名稱。你可能想看看Soundex2。對於需要模糊匹配的大型數據表,我的名字和姓氏都有Soundex和Soundex2字段,並且效果很好。 – 2011-04-30 19:49:03

回答

1

我使用的是艾倫·布朗的探測法功能與Access 2003:Soundex - Fuzzy matches

它返回的Soundex值作爲一個字符串。如果您正在使用的Soundex函數也返回一個字符串,請用引號括起Soundex(LSearchString),以便數據庫引擎將其識別爲字符串值而不是缺少參數的名稱。

LSQL = LSQL & "WHERE Soundex([Victim Surname]) = '" & Soundex(LSearchString) & "';" 
+0

是的,這是我使用的相同功能,忘記提及,儘管工作完美,謝謝。 – Daniel 2011-05-02 23:31:42