2014-11-21 94 views
0

我正在使用名爲「ClassProfile」的表單進行搜索查詢。該表格是連續的表格,因此以數據表格式列出記錄。我在窗體上兩個文本框:解決搜索查詢

  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'發言並遵守它,並指出任何錯誤,並讓我們知道你會得到什麼?另外,在'Me.RecordSource = sql'之前放置一個debug.print sql。有些東西可能很容易出錯。 – 2014-11-21 13:35:49

+0

調試似乎根本不起作用。 F5在我的即時窗口中沒有帶來任何結果,因此逐步使用F8。我甚至做了相同的功能,並創建了一個querydefs,將其指向一個臨時查詢以查明問題。到目前爲止,IsNull是一個對字符串變量無效的函數;因此我直接引用文本框而不是將它們存儲在變量中。如果我找到解決方案,我會發布。任何幫助表示讚賞。 – 2014-11-21 16:14:24

+0

單擊按鈕時,「If Not IsNull(strm)Then'沒有以黃色突出顯示? – 2014-11-21 16:15:33

回答

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有一個值。其餘的不起作用。請幫助 – 2014-11-21 17:33:43

+0

我更正了代碼。這個問題與'ISNULL(strsearching)'測試有關。 – 2014-11-21 17:39:55

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',第一次打開表單並點擊搜索按鈕時沒有提供任何值會發生什麼?你有別的代碼將這些文本框設置爲空嗎?如果沒有,爲什麼你沒有得到錯誤94-無效的使用空值? – 2014-11-21 18:35:29

+0

好的想法,文本框本身是沒有限制的,所以我懷疑任何「泄漏」的數據是可能的;每次表單關閉時,它們的值都被銷燬。或者,在窗體的closeEvent()上,我可能會將它們的值重置爲空,以防止出現這種情況。否則我根本沒有任何錯誤:) – 2014-11-21 19:15:28

+1

這很奇怪!因爲它們沒有被保留,所以它沒有任何好處來設置關閉值。如果我用你的代碼打開這個表單,只點擊'搜索'框,我會得到Null錯誤。你有其他的代碼可能會設置爲空?我正在運行2010年。 – 2014-11-21 19:20:51