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