【问题标题】:Microsoft Access VBA - Run time error '3075'Microsoft Access VBA - 运行时错误“3075”
【发布时间】:2012-12-13 09:44:03
【问题描述】:

我遇到了运行时错误“3075”。我是VBA的新手! >.

例如,如果我在文本框 (txtMainName) 中输入名称“Sally”,则单击搜索按钮时会弹出错误。

错误:

运行时错误“3075”:

查询表达式中的语法错误(缺少运算符)“和 [主申请人姓名] 像 'Sally'”。

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

【问题讨论】:

  • stLinkCriteria 的内容是什么(它包含的实际值,不是认为它包含的内容) 当你到达DoCmd.OpenForm? (在OpenForm 行设置断点,运行到该点,然后看看stLinkCriteria 是什么。)

标签: ms-access vba ms-access-2003


【解决方案1】:

Runtime error 3975Invalid operator,根据在 access vba runtime error 3075 上的快速 Google 搜索(您可以自己制作)。

问题是您只将"" 的值分配给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) .为此,您可以在发生错误的行上设置断点,运行您的应用程序直到遇到断点,然后检查变量的值。这准确地向您显示了变量包含的内容,这可以揭示问题。

【讨论】:

  • 非常感谢!它有效,但我认为你错过了“结束如果”。解释很清楚,我现在可以理解出了什么问题。
  • 是的,我做到了。我会修复它。谢谢。 :-)
  • 回到我停下来的地方...如何显示我的记录?文本框没有显示我想要的结果...
  • 我不知道。您的问题中没有询问 display 结果,这意味着这是一个新的、单独的问题。
【解决方案2】:

从逻辑上看,您的 stLinkCriteria 似乎以“and”开头,这导致了错误:

您可能应该输入:

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    

希望可行 - 否则,逻辑看起来不错。

【讨论】:

    【解决方案3】:

    我从点和字段名称之间的额外空格中收到此错误:

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

    微软注意:请创建更准确和有用的错误消息。谢谢。我毫不怀疑你会做对的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多