搜索多个自由格式文本

时间:2015-02-05 21:45:19

标签: ms-access-2010

我正在使用Access 2010.我有一个数据库,可以记录流程中错误的自由格式文本。我想创建一个函数,在自由格式文本中搜索关键字并根据错误代码进行报告。不知道如何去做这件事:

EX:
ID |的说明
1 |松散的部分
2 |涂抹油漆
3 |没有螺栓

与另一个表格中的关键字进行比较

关键字 | 错误代码
油漆| 32个
螺栓| 25
部分| 55

输出看起来像

ID | 错误代码
1 | 55
2 | 32
3 | 25

我的想法是,我可以更新关键字表,以包含新的关键字和错误代码作为更多弹出窗口。

1 个答案:

答案 0 :(得分:1)

我给你一个可能的解决方案:

假设您的表名为tbDescriptions,tbKeywords,tbErrors。 tbErrors的ID字段是自动编号的(如果不是,您只需要在重建期间添加ID值)。

这是一个可用于重建错误表的子程序。 请注意,我假设每次需要更新时都可以删除并重建tbErrors。如果不是这样,你需要在tbErrors中管理Error的存在,但它并没有那么复杂。

Private Sub RebuildErrorTable()
    Dim rsKeyWords As dao.Recordset, rsErrors As dao.Recordset
    Dim strKeyword As String
    Dim strSELECT As String
    Dim strWhereCond As String
    Dim intNumOccurrences As Integer

    '
    ' Delete all records from tbErrors
    '
    DoCmd.SetWarnings False
    DoCmd.RunSQL = "DELETE * FROM tbErrors"
    DoCmd.SetWarnings True

    '
    ' Rebuild table tbErrors
    '
    strSELECT = "SELECT * FROM tbKeyWords"
    Set rsKeyWords = CurrentDb.OpenRecordset(strSELECT, dbOpenDynaset)      ' Open keywords table
    strSELECT = "SELECT * FROM tbErrors"
    Set rsErrors = CurrentDb.OpenRecordset(strSELECT, dbOpenDynaset)        ' Open Errors table for rebuilding

    '
    ' Scan all keywords
    '
    Do While Not rsKeyWords.EOF

        strKeyword = rsKeyWords!keywords                                    ' Current keyword

        strWhereCond = "Desc LIKE '*" + strKeyword + "*'"                   ' Build search condition
        intNumOccurrences = DCount("ID", "tbDescriptions", strWhereCond)    ' Count keyword occurences in the descriptions table

        If intNumOccurrences > 0 Then                                       ' If keyword was found at least once
            With rsErrors                                                   ' Inser error code into Errors table
                .AddNew
                .Fields("ErrorCode") = rsKeyWords!ErrorCode
                .Update
            End With

        End If

        rsKeyWords.MoveNext                                                 ' Move to next keyword

    Loop

    '
    ' Close all and free memory
    '
    rsErrors.Close

    rsKeyWords.Close

    Set rsErrors = Nothing

    Set rsKeyWords = Nothing


End Sub

再见:-) WIZ