2014-11-21 5 views
0

Я делаю поисковый запрос для использования в форме под названием «ClassProfile». Форма является непрерывной формой и поэтому перечисляет записи в формате данных. У меня есть два текстовых полей на форме:РЕШЕНИЕ ПОИСКА QUERY

  1. clsBox - используется для ввода имени класса Е.Г. 1T
  2. nameBox - используется для ввода имени учителя, например, Джо

Оба эти текстовые поля будут использоваться пользователем для выполнения различных поисков на основе значений, содержащихся в них. Рядом с ними находится командная кнопка с надписью «Поиск». OnClick() событие кнопки поиска содержит следующий код для выполнения поиска:

Private Sub cmdSearch_Click() 

Dim strsearching As String 
Dim strm As String 
Dim tname As String 

strm = Me.clsBox.Value 
tname = Me.NameBox.Value 

If Not IsNull(strm) Then 
    If IsNull(strsearching) Then 
    strsearching = "(([ClassProfile].[Class]) LIKE ""*" & strm & "*"")" 
    End If 
Else: strsearching = "" 
End If 

If Not IsNull(tname) Then 
    If Not IsNull(strsearching) Then 
    strsearching = strsearching & " AND (([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
    Else: strsearching = "(([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
    End If 
Else: strsearching = "" 
End If 

Dim sql As String 

If Not IsNull(strsearching) Then 
    sql = "SELECT * FROM [ClassProfile] WHERE " & strsearching 
    Else: sql = "ClassProfile" 
End If 

Me.RecordSource = sql 

End Sub 

Когда не выполняет поиск ничего не происходит с записями формы, знак код не работает. Любая помощь приветствуется.

+1

Вы можете поставить точку останова на первом же 'оператор If' и следовать за ним, отмечая любые ошибки, и дайте нам знать, что вы получите? Кроме того, поместите sql-файл debug.print непосредственно перед 'Me.RecordSource = sql'. Что-то может быть легко там. –

+0

Отладка не работает вообще. F5 не дает никаких результатов в моем ближайшем окне, так же как и в использовании F8. Я даже сделал функцию того же самого и создал querydefs, указывающий на временный запрос, чтобы определить проблему. Пока IsNull - это функция, которая не работает со строковыми переменными; поэтому ссылаюсь на текстовые поля напрямую, а не на их хранение в переменных. Если я найду решение, я опубликую. Любая помощь приветствуется. –

+0

Когда вы нажимаете кнопку, 'If Not IsNull (strm) Then' не подсвечивается желтым цветом? –

ответ

1

ОБНОВЛЕНО: Изменены проверки ISNULL (strsearching). Вот что-то работает. Я изменил ваши Null-проверки, чтобы не иметь дело с иногда нулевыми значениями.

Option Compare Database 
Option Explicit 

Private Sub cmdSearch_Click() 

Dim strsearching As String 
Dim strm  As String 
Dim tname  As String 
Dim sql   As String 

    strm = Nz(Me.clsBox.Value) 
    tname = Nz(Me.NameBox.Value) 

    strsearching = "" 
    If strm <> "" Then 
     strsearching = "(([ClassProfile].[Class]) LIKE ""*" & strm & "*"")" 
    End If 

    If tname <> "" Then 
     If strsearching <> "" Then 
      strsearching = strsearching & " AND (([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
     Else 
      strsearching = "(([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
     End If 
    End If 

    If strsearching <> "" Then 
     sql = "SELECT * FROM [ClassProfile] WHERE " & strsearching 
    Else 
     sql = "ClassProfile" 
    End If 

    Debug.Print sql 

    Me.RecordSource = sql 

End Sub 
+0

Я пробовал это, но он позволяет мне искать второй сценарий в четырех возможных сценариях, перечисленных ниже: 1. clsBox пуст и NameBox пуст 2. clsBox имеет значение и NameBox пуст 3. clsBox пуст и NameBox имеет значение 4. clsBox имеет значение, а NameBox имеет значение. Остальное не работает. Пожалуйста, помогите –

+0

Я исправил код. Проблема заключалась в тестах ISNULL (strsearching). –

0

Работы как шарм Уэйн. Все комплименты вам. Модифицированный это просто немного точности, вот окончательный код:

strm = Me.clsBox.Value 
tname = Me.NameBox.Value 

strsearching = "" 
If Len(Trim(Me.clsBox.Value)) <> 0 Then 
    strsearching = "(([ClassProfile].[Class]) LIKE ""*" & strm & "*"")" 
End If 

If Len(Trim(Me.NameBox.Value)) <> 0 Then 
    If strsearching <> "" Then 
    strsearching = strsearching & " AND (([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
    Else: strsearching = "(([ClassProfile].[Class Teacher]) LIKE ""*" & tname & "*"")" 
    End If 
End If 

Dim sql As String 

If strsearching <> "" Then 
    sql = "SELECT * FROM [ClassProfile] WHERE " & strsearching 
    Else: sql = "ClassProfile" 
End If 

Me.RecordSource = sql 
+1

Мне любопытно .. с вашим кодом 'strm = Me.clsBox.Value', что произойдет ПЕРВЫЙ раз, когда вы открываете форму и нажимаете кнопку SEARCH без предоставления ЛЮБЫХ значений? У вас есть код в другом месте, который заставляет эти текстовые поля пустым? Если нет, почему вы не получаете ошибку 94 - Недопустимое использование Null? –

+0

Хорошее мышление, сами текстовые поля не связаны, поэтому я сомневаюсь, что возможна «утечка» данных; каждый раз, когда форма закрывается, их значения уничтожаются. В качестве альтернативы на closeEvent() формы я могу сбросить их значения до пустых, чтобы предотвратить такое возникновение. В противном случае я не получу ошибки вообще :) –

+1

Это странно! Не будет никакого хорошего, чтобы устанавливать значения на закрытии, так как они не сохраняются. Если я открою эту форму с помощью вашего кода и только щелкнув поле «Поиск», я получу ошибку Null. У вас есть другой код, который может установить флажки в пустые? Я запускаю 2010. –

Смежные вопросы