Как сделать TextBox для доступа с числовым значением равным DLookup с критериями TextBox - PullRequest
0 голосов
/ 19 мая 2009

Я действительно понятия не имею, почему это не работает, но я пытаюсь заставить работать следующее:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
     & Me.Text1") Then
   MsgBox "It works"
Else
End If

Приведенный выше код является тестовым кодом для более крупного проекта, над которым я работаю, поэтому имена таблиц и полей предназначены только для тестирования. Кроме того, Field1 является числовым полем. По сути, когда я ввожу 1 в Text1, я бы хотел, чтобы функция DLookup нашла 1 в Test1_Table.Field1 и выдала мне сообщение о том, что это работает. Я могу заставить это работать со строковыми значениями, такими как:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1='" _
    & Me.Text1 & "'")Then

Аналогично, это работает, когда в Text1 вводится 1:

If 1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
    & Me.Text1") Then

Однако я пробовал:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
    & Forms!TestSearch_Form!Text0)Then

и

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
    & Forms!TestSearch_Form!Text0)Then

и т.д ...

Я пробовал много разных комбинаций, и мне кажется, что я не могу получить их равными при работе с числовыми значениями. Кто-нибудь знает, чего мне не хватает или есть идеи?

Спасибо,

Damion

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

Как насчет:

 If Not IsNull(DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)) Then

Это будет работать только в том случае, если Field1 определено как числовое поле, вам потребуются разделители, если это поле даты или времени.

EDIT:

Вышеприведенный оператор либо равен значению Me.Text1, либо равен нулю. Другой способ использовать DllookUp - сказать:

 SomeVar=DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)

SomeVar будет либо нулевым, то есть не найденным, либо вернет значение или Field1, равное Me.Text1, потому что это то, что мы просили в выражении Where. Из этого вы можете видеть, что возвращать значение поля Field1 бессмысленно, оно либо найдено равным text1, либо не найдено и имеет значение null. Единственной причиной получения значения DlookUp является то, что вы ищете какое-то другое значение или расчет в таблице.

После этого важно помнить, что вы ищете точное совпадение, и десятичные значения могут сильно отличаться далеко справа от десятичной точки, где вы вряд ли посмотрите.

0 голосов
/ 20 мая 2009

Если CInt (Me.Text1) = DLookup ("Field1", "Test1_Table", "Test1_Table.Field1 =" & Me.Text1), то ...

Приведенный выше код работает отлично. Благодаря Guiness я смог использовать свой оригинальный код и просто добавить CInt в оператор if.

Также, спасибо всем за ваш вклад.

DFM

0 голосов
/ 19 мая 2009
Dim sWhere as String
sWhere = "Test1_Table.Field1=" & Me.Text1
If CInt(Me.Text1)=DLookup("Field1", "Test1_Table", sWhere) Then         
     MsgBox "It works" 
Else
   'do something else
End If

Попытка сделать слишком много VBA внутри DLookup может быть проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...