2014-10-06 2 views
0

я следующая функция используется для проверки моего текстового поля, и если она содержит несколько слов, он будет отображаться эквивалентными словами из справочной таблицы с именем «joinlookupall»функции для поиска текстового поля в доступе 2007

Function speclook(ByVal Text) 
    If IsNull(Text) Then 
    speclook = Null 
    Exit Function 
End If 

Dim Data As LookupData 
Static joinlookupall As VBA.Collection 

If joinlookupall Is Nothing Then 
    Set joinlookupall = New VBA.Collection 
    Dim rs As DAO.Recordset 
    Set rs = CurrentDb.OpenRecordset("joinlookupall", dbOpenForwardOnly) 

    While Not rs.EOF 
    Set Data = New LookupData 
    If IsNull(rs(1)) Then 
    'do nothing 
    Else 
    Data.Key = "*" + rs(1) + "*" 
    End If 

    If IsNull(rs(2)) Then 
    'do nothing 
    Else 
    Data.value = rs(2) 
    End If 

    joinlookupall.Add Data 
    rs.MoveNext 

    Wend 

End If 


    Dim S As String 

For Each Data In joinlookupall 
    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 speclook = Null Else speclook = S 
End Function 

мой текст - это объявление о работе, которое содержит некоторые позиции, необходимые для работы, что-то вроде «компания ищет инженера-электрика ......», функция проверяет объявление о работе, чтобы узнать, что является необходимой карьерой для показать подходящий отдел из справочной таблицы

  words (rs(1))   | department (rs(2)) 
    ------------------------------------------------- 
     electrical engineer  | electric-dep 
     electrical engineering | electric-dep 
     mechanical engineers | mechanic-dep 

, так и в предыдущем примере функция будет отображаться «электрический-DEP»

моя проблема с этой функцией является то, что она всегда проверять мой текст только с одним шаблоном, который

 Data.Key = "*" + rs(1) + "*" 

я хочу использовать многие шаблоны, чтобы проверить мой текст с ним что-то вроде:

Data.Key = rs(1) + "*" 

Data.Key = "*" + rs(1) 

Data.Key = "*" + chr(32) + rs(1) + chr(32) + "*" 

так, если любой из этих шаблонов существует функция будет работать правильно, потому что теперь он не работает со всеми условиями, а иногда существуют слова, но не могу видеть его потому что он использует только один шаблон или форму

Я попытался использовать переменные для (Data.Key), но это не сработало, я хочу знать правильный способ заставить эти шаблоны работать вместе, если функция найдет что-то из этого, она будет работать и показывать до правильного значения

по пути, чтобы сделать эту работу функции вы должны создать модуль класса с именем «LookupData» и поместите следующий код в нем

Public Key As String 
Public value As String 

ответ

1

Почему бы не сделать что-то вроде этого:

Function speclook(byval text, template as string) 
    ... 
    While Not rs.EOF 
     Set Data = New LookupData 
     If not IsNull(rs(1)) Then 
      Data.Key = replace(template, "X", rs(1)) 
     End If 

     If not IsNull(rs(2)) Then 
      Data.value = rs(2) 
     End If 

     joinlookupall.Add Data 
     rs.MoveNext 
    Wend 
End Function 

Затем вызовите функцию как

speclook(sometext, "*X*") 
speclook(sometext, "*" + chr(32) + "X" + chr(32) + "*") 
etc 
Смежные вопросы