Access导航窗体关联报表报错求助:运行时错误3075
问题原因及修正方案
错误原因
- 文本字段筛选未加单引号:
CourseCode是文本类型字段,但按钮代码构造筛选条件时,未给选中的文本值添加单引号,Access会将Math101这类值识别为字段名而非字符串,直接引发语法错误。 - 单引号重复嵌套:报表的
On_Open事件中,错误地给筛选值重复套入单引号,导致最终生成的SQL语句出现[CourseCode]='''Math101'''这类格式错误的条件。 - 双重筛选冲突:同时使用了
DoCmd.OpenReport的筛选参数和报表内修改RecordSource的逻辑,两种筛选方式叠加造成SQL语句语法混乱。
修正方案(二选一即可)
方案一:保留按钮筛选逻辑,移除报表自定义筛选
- 修改按钮的
On_Click代码,给文本字段值添加单引号:
Private Sub Command47_Click() Dim strFilter As String Dim strReportName As String ' 文本类型字段需给值加单引号,避免语法错误 strFilter = "[CourseCode] = '" & Me.Combo25.Value & "'" strReportName = "RCourse" ' 打开报表并应用筛选 DoCmd.OpenReport strReportName, acViewPreview, , strFilter End Sub
- 删除或注释掉报表的
On_Open事件代码,让报表直接使用原记录源QCourse,通过DoCmd.OpenReport传入的筛选参数自动过滤数据。
方案二:保留报表筛选逻辑,移除按钮筛选参数
- 修改按钮代码,仅打开报表,不传递筛选参数:
Private Sub Command47_Click() Dim strReportName As String strReportName = "RCourse" ' 直接打开报表,筛选逻辑由报表自身处理 DoCmd.OpenReport strReportName, acViewPreview End Sub
- 修正报表的
On_Open事件代码,移除多余的单引号嵌套:
Private Sub Report_Open(Cancel As Integer) Dim strFilterValue As String If Not IsNull(Forms![Navigation Form]![NavigationSubform].Form![Combo25]) Then strFilterValue = Forms![Navigation Form]![NavigationSubform].Form![Combo25] ' 正确拼接SQL条件,仅添加一层单引号 Me.RecordSource = "SELECT * FROM [QCourse] WHERE [CourseCode]='" & strFilterValue & "'" End If End Sub
内容的提问来源于stack exchange,提问作者user21829562
相关产品推荐
相关产品推荐

