我在查询中创建的表单中收到语法错误。我创建了表单来限制对更改记录的访问。在尝试在表单上设置过滤器时,我会收到我尝试过滤的所有属性的语法错误。我相信这与查询代码中内部联接的缺少()
有关,但对我来说奇怪的是我可以毫无问题地过滤查询。以下是查询代码:
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];
任何想法为什么只有表单会产生语法错误,或者如何解决这个问题?
答案 0 :(得分:9)
我能够通过进入表单的设计视图并将[]放在任何有空格的字段名称周围来快速修复它。我现在能够使用内置的过滤器,而不会出现有关语法问题的恼人弹出窗口。
答案 1 :(得分:6)
我有同样的问题。
正如Dedren所说,问题不是查询,而是表单对象的控制源。围绕每个对象控制源放置[]。例如:Contol Source: [Product number]
,Control Source: Salesperson.[Salesperson number]
等
Makita建议您转到您在查询中引用的原始表格并重命名该字段,以便没有空格,例如:SalesPersonNumber
,ProductNumber
等。这将解决许多未来的问题,如好。运气最好!
答案 2 :(得分:2)
尝试删除空格,使字段名称合法。这是一个很长的镜头,但它实际上帮助了我。
答案 3 :(得分:0)
我通过进入"设计视图"快速解决了这个问题。在具有空格的任何字段名称之间的相同表格的主表格和下划线(_)。我现在能够使用内置的过滤器,而不会出现有关语法问题的恼人弹出窗口。
答案 4 :(得分:0)
将[]放在任何有空格的字段名称周围(如Dreden所说)并保存您的查询,关闭它并重新打开它。
使用Access 2016,在我添加[]围绕任何字段名称后,我仍然在新查询上出现错误消息...直到保存查询。
保存查询(并在对象'列表中可见),关闭并重新打开后,错误消息将消失。这似乎是Access的一个错误。
答案 5 :(得分:0)
不,不,不。
这些答案都错了。我的大脑基本上缺乏知识,我现在正在寻求补救。
这里的主要问题是您的命名方案。它冗长,含有不良字符,并且非常不一致。
首先:名为Salesperson
的表格不需要在名为Salesperson.Salesperson number
,Salesperson.Salesperson email
的表格中包含每个字段。您已经在表Salesperson
中了。此表中的所有内容都与Salesperson
相关。你不必一直说出来。
而是使用ID
,Email
。请勿使用Number
,因为这可能是一个保留字。您是否真的努力在数据库的生命周期内为每个字段名称键入[]?
名为Student
的表上的主键可以是ID
或StudentID
,但要保持一致。外键应仅按其指向的表格ID
命名。例如:Student.ID
和Appointment.StudentID
。 ID
总是大写的。我不在乎你的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