2012-12-28 142 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.. 

注微软:请创建更精确和有用的错误信息。谢谢。我毫不怀疑你会在这一点上得到正确的。