2012-12-28 141 views
4

我遇到了運行時錯誤'3075'。我是VBA的新手! >。 <我能知道它出錯的地方嗎?我無法解決它...Microsoft Access VBA - 運行時錯誤'3075'

例如,如果我在文本框(txtMainName)中輸入名稱「莎莉」,一旦點擊搜索按鈕,彈出錯誤。

錯誤:

運行時錯誤 '3075':

語法錯誤(缺少操作員)在查詢表達式'和[主申請人名稱]像 '莎莉'」

Public Sub Search_Record() 

Dim stDocName As String 
Dim stLinkCriteria As String 
Dim stLinkCriteria1 As String 
Dim stLinkCriteria2 As String 


    stLinkCriteria = "" 
    stDocName = "frmDisplayInfo" 

    If (Me!txtMainName <> "") Then 
     stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'" 
     stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria1 
    End If 

    If (Me!txtIDNo <> "") Then 
     stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'" 
     stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2 
    End If 

    '(*This part is highlighted*) 
    DoCmd.OpenForm stDocName, , , stLinkCriteria 
    DoCmd.Maximize 

End Sub 
+1

當你到達'DoCmd.OpenForm'時,'stLinkCriteria'(它包含的* actual *值,*不是*你認爲它包含的)的內容是什麼? (在'OpenForm'行設置一個斷點,運行到那個點,然後看看stlinkCriteria是什麼時候到達的。) –

回答

6

Runtime error 3975Invalid operator,根據上一個access vba runtime error 3075快速谷歌搜索(你可能做你自己)。

的問題是您只能將""的值分配給stCriteria。如果第一個if語句執行,stCriteria然後被分配的值爲stCriteria AND stCriteria1,這是無效的。

如果執行第二個if語句,則會發生同樣的情況。 (事實上​​,如果兩者都實際運行,stCriteria現在包含AND stCriteria1 AND stCriteria2,這更是雪上加霜。)

解決的辦法是修改代碼以僅添加AND,如果它需要:

stLinkCriteria = "" 
stDocName = "frmDisplayInfo" 

If (Me!txtMainName <> "") Then 
    stLinkCriteria = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'" 
End If 

If (Me!txtIDNo <> "") Then 
    If stLinkCriteria <> "" then 
     stLinkCriteria = stLinkCriteria & " AND " 
    End If 
    stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'" 
    stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2 
End If 

對於未來參考,解決這類問題的方法是在引起錯誤的行(此處爲DoCmd.OpenForm行)執行前檢查變量的值(在此例中爲stCriteria)。您可以通過在發生錯誤的行上設置斷點,運行您的應用程序直至斷點被打開,然後檢查變量的值來完成此操作。這顯示你究竟是變量包含什麼,它可以揭示問題。

+2

非常感謝!它的工作原理,但我認爲你錯過了一個'結束如果'。解釋清楚,我現在可以明白出了什麼問題。 – GuessWho

+0

是的,我做到了。我會解決它。謝謝。 :-) –

+0

回到我停下來的地方......我如何顯示我的記錄?該文本框不顯示我想要的結果... – GuessWho

3

從邏輯,好像你stLinkCriteria開始與「和」,這是導致錯誤:

你或許應該把:

If (Me!txtMainName <> "") Then 

    stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'" 

    if stLinkCriteria <> "" then     <==== add this 

     stLinkCriteria = stLinkCriteria & " and " <==== and this 

    end if           <==== and this 

    stLinkCriteria = stLinkCriteria & stLinkCriteria1 <=== change this 

End If  

。希望工程 - 否則,邏輯觀察好。

+1

非常感謝!有用! – GuessWho

0

我得到這個錯誤在一個點和字段名之間的額外空間:

DoCmd.RunSQL "UPDATE cp INNER JOIN [char_lib] ON [cp]. [library_id] = [char_lib].[id] set.. 

注微軟:請創建更精確和有用的錯誤信息。謝謝。我毫不懷疑你會在這一點上得到正確的。