首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数检查文本字段。

函数检查文本字段。
EN

Stack Overflow用户
提问于 2013-10-13 19:55:28
回答 2查看 591关注 0票数 0

我正在使用access 2007,我需要一个函数来检查一个文本字段,如果它找到了某个单词,它将根据查找表返回某个值。

例如,我有一个文本字段如下:

代码语言:javascript
复制
    ID                   Text
|    1     |  engineers for mechanical work  
|    2     |  engineers for civil work       
|    3     |  engineers for electrical work 

我有如下查表:

代码语言:javascript
复制
     Checkwords             showords
 |   mechanical      |   mechanical engineer
 |   civil           |   civil engineer
 |   chemical        |   chemical engineer
 |   electrical      |   electrical engineer
 |   maintenance     |   maintenance engineer
 |   electronics     |   electronics engineer

我需要这个功能来检查文字记录,如果它找到像“机械”这样的文字,它就会显示“机械工程师”,如果它找到像“土木”这样的文本,它会显示“土木工程师”等等。

我大约有200个字要检查,所以我需要一个函数,它使用带有"like“参数的查找表.这有可能吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-13 22:44:49

那么,一个更通用的版本--越依赖于VBA而不是SQL,使用大量甚至不是那么大的数据就越慢:

(1)添加类模块,将其命名为LookupData,并向其添加以下字段:

代码语言:javascript
复制
Public Key As String
Public Value As String

(2)在标准模块中,定义以下功能:

代码语言:javascript
复制
Function LookupShowWords(ByVal Text)
  If IsNull(Text) Then
    LookupShowWords = Null
    Exit Function
  End If
  Dim Data As LookupData
  Static LookupTable As VBA.Collection
  If LookupTable Is Nothing Then
    Set LookupTable = New VBA.Collection
    Dim RS As DAO.Recordset
    Set RS = CurrentDb.OpenRecordset("LookupTable", dbOpenForwardOnly)
    While Not RS.EOF
      Set Data = New LookupData
      Data.Key = "*" + RS(0) + "*"
      Data.Value = RS(1)
      LookupTable.Add Data
      RS.MoveNext
    Wend
  End If
  Dim S As String
  For Each Data In LookupTable
    If Text Like Data.Key Then
      If Len(S) = 0 Then
        S = Data.Value
      Else
        S = S + ";" + Data.Value
      End If
    End If
  Next
  If Len(S) = 0 Then LookupShowWords = Null Else LookupShowWords = S
End Function

(3)列出结果的查询现在可以重写为如下所示:

代码语言:javascript
复制
SELECT ID, LookupShowWords(Text) AS ShowWords FROM MainTable ORDER BY ID;

注意,(2)中的假设是查找表本质上是静态的,在这种情况下,可以在调用之间安全地缓存其内容。

票数 0
EN

Stack Overflow用户

发布于 2013-10-13 21:47:46

(1)自定义VBA函数提取关键词:

代码语言:javascript
复制
Function ExtractKeyword(ByVal Text)
  Text = Mid(Text, InStr(Text, " for ") + 5)
  If Right(Text, 5) = " work" Then
    ExtractKeyword = Left(Text, Len(Text) - 5)
  Else
    ExtractKeyword = Text
  End If
End Function

(2)使用它的查询:

代码语言:javascript
复制
SELECT MainTable.ID, LookupTable.ShowWords
FROM MainTable LEFT JOIN
     LookupTable ON ExtractKeyword(MainTable.Text) = LookupTable.CheckWords
ORDER BY MainTable.ID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19349588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档