访问表单 - 查询表达式中的语法错误(缺少运算符)

时间:2014-02-07 20:15:44

标签: forms ms-access access-vba syntax-error

我在查询中创建的表单中收到语法错误。我创建了表单来限制对更改记录的访问。在尝试在表单上设置过滤器时,我会收到我尝试过滤的所有属性的语法错误。我相信这与查询代码中内部联接的缺少()有关,但对我来说奇怪的是我可以毫无问题地过滤查询。以下是查询代码:

SELECT CUSTOMER.[Product Number], SALESPERSON.[Salesperson Number],
SALESPERSON.[Salesperson Name], SALESPERSON.[Email Address]
FROM SALESPERSON INNER JOIN CUSTOMER ON
SALESPERSON.[Salesperson Number] = CUSTOMER.[Salesperson Number];

任何想法为什么只有表单会产生语法错误,或者如何解决这个问题?

9 个答案:

答案 0 :(得分:9)

我能够通过进入表单的设计视图并将[]放在任何有空格的字段名称周围来快速修复它。我现在能够使用内置的过滤器,而不会出现有关语法问题的恼人弹出窗口。

答案 1 :(得分:6)

我有同样的问题。 正如Dedren所说,问题不是查询,而是表单对象的控制源。围绕每个对象控制源放置[]。例如:Contol Source: [Product number]Control Source: Salesperson.[Salesperson number]

Makita建议您转到您在查询中引用的原始表格并重命名该字段,以便没有空格,例如:SalesPersonNumberProductNumber等。这将解决许多未来的问题,如好。运气最好!

答案 2 :(得分:2)

尝试删除空格,使字段名称合法。这是一个很长的镜头,但它实际上帮助了我。

答案 3 :(得分:0)

我通过进入"设计视图"快速解决了这个问题。在具有空格的任何字段名称之间的相同表格的主表格和下划线(_)。我现在能够使用内置的过滤器,而不会出现有关语法问题的恼人弹出窗口。

答案 4 :(得分:0)

将[]放在任何有空格的字段名称周围(如Dreden所说)并保存您的查询,关闭它并重新打开它。

使用Access 2016,在我添加[]围绕任何字段名称后,我仍然在新查询上出现错误消息...直到保存查询。

保存查询(并在对象'列表中可见),关闭并重新打开后,错误消息将消失。这似乎是Access的一个错误。

答案 5 :(得分:0)

不,不,不。

这些答案都错了。我的大脑基本上缺乏知识,我现在正在寻求补救。

这里的主要问题是您的命名方案。它冗长,含有不良字符,并且非常不一致。

首先:名为Salesperson的表格不需要在名为Salesperson.Salesperson numberSalesperson.Salesperson email的表格中包含每个字段。您已经在表Salesperson中了。此表中的所有内容都与Salesperson相关。你不必一直说出来。

而是使用IDEmail。请勿使用Number,因为这可能是一个保留字。您是否真的努力在数据库的生命周期内为每个字段名称键入[]?

名为Student的表上的主键可以是IDStudentID,但要保持一致。外键应按其指向的表格ID命名。例如:Student.IDAppointment.StudentIDID总是大写的。我不在乎你的IDE是否告诉你,因为除了你的IDE以外,所有人都会ID。甚至Access都喜欢ID

第二次:为所有字段命名,不要包含空格或特殊字符,并尽可能缩短它们,如果它们与保留字冲突,请找另一个字。

而不是:phone number使用PhoneNumber甚至更好,简单地使用Phone。如果您选择what time user made the withdrawal,则必须每次都输入该内容。

第三:这一个是最重要的:在您选择的任何命名方案中始终保持一致。您应该可以说,"我需要该表中的邮政编码;它的名字将是PostalCode。"您应该知道,甚至不必查找它,因为您的命名约定是一致的。

回顾:Terse,不详细。保持名称简短,没有空格,不要重复表名,不要使用保留字,并将每个单词大写。最重要的是,要保持一致。

我希望你接受我的建议。这是正确的方法。我的答案是对的。对于你这个星球上的余生,你应该极其迂腐,你的命名方案已经到了绝对的困扰

注意:您实际上必须在表的设计视图和查询中更改字段名称。

答案 6 :(得分:0)

加号()括号可能会在其他情况下产生问题(如果出现顺畅)。这还会在查询表达式中产生语法错误(缺少运算符)。

答案 7 :(得分:0)

我在Recordsource是动态的表单上使用了它。

Sql很好,答案是捕获错误!

Private Sub Form_Error(DataErr As Integer, Response As Integer)
'    Debug.Print DataErr

    If DataErr = 3075 Then
        Response = acDataErrContinue
    End If

End Sub

答案 8 :(得分:0)

人们面临着类似的问题,这是我的完整代码

让我知道我要去哪里错了。 错误信息: 查询表达式“ AutoID =”中的语法错误(缺少运算符)

仅当我单击登录而不在组合框和密码字段中输入任何txt时,这种情况才会发生。

    Option Compare Database
Option Explicit

Private Sub Login_Click()

If IsNull(Me.ComboUserSelect.Value) Then
    MsgBox "Please select username", vbInformation, "Login ID Required"
    Me.ComboUserSelect.SetFocus
ElseIf IsNull(Me.txtpassword.Value) Then
    MsgBox "please enter password", vbInformation, "Password is Required"
    Me.txtpassword.SetFocus
End If

'============= Declaring the variables ==========='
Dim passwordindatabase As String
Dim typedpassword As String
Dim useraccesstype As String


passwordindatabase = DLookup("Password", "LoginDB", "AutoID=" & ComboUserSelect.Value)
typedpassword = txtpassword.Value
useraccesstype = DLookup("AccessType", "LoginDB", "AutoID=" & ComboUserSelect.Value)


If typedpassword = passwordindatabase Then
    If useraccesstype = "Admin" Then
    DoCmd.OpenForm ("Cam Infra")
    DoCmd.Close acForm, "Login_Form", acSaveNo
    Else
    If useraccesstype = "user" Then
    DoCmd.OpenForm ("Custom_Search_Form")
    DoCmd.Close acForm, "Login_Form", acSaveNo
    End If
    End If
    End If
    

End Sub