DoCmd.OpenReport 上的错误

Posted

技术标签:

【中文标题】DoCmd.OpenReport 上的错误【英文标题】:Error on DoCmd.OpenReport 【发布时间】:2014-01-15 16:13:33 【问题描述】:

单击“发票预览”上的“确定”按钮时,我收到“运行时错误 '3615' 表达式类型不匹配”。

我打开主菜单 >> 选择工作订单 ID >> 单击发票预览 >> 接受默认信息 >> 单击确定。当我这样做时,我收到上述错误。我无法弄清楚为什么会发生这种情况,并且在这两个地方都更改了字段类型,并以各种不同格式重做 VBA 代码,认为我编码错误。

谁能帮我找出错误的根源...

链接已删除...

【问题讨论】:

【参考方案1】:

当您单击该按钮时,这是 btnInvoicePreview_Click() 行触发错误 #3615,“表达式中的类型不匹配。”

DoCmd.OpenReport "Invoice", acPreview

由于发票报告的记录源查询中的此子句而发生错误。

FROM
    Employee 
    RIGHT JOIN 
        (
            Client 
            INNER JOIN [Work Order]
            ON Client.ClientID = [Work Order].ClientID
        )
    ON Employee.EmployeeID = [Work Order].EmployeeID

Employee.EmployeeID 是 AutoNumber,这意味着它的基本数据类型是 Long Integer。但是[Work Order].EmployeeID 是文本数据类型。因此,您会收到 "type mismatch" 错误,因为查询要求将数字字段与文本字段连接起来。

解决问题的两种方法...

    更改一个表中的字段类型,使两个字段具有相同的数据类型,或至少兼容的数据类型 转换一个的数据类型以匹配另一个的数据类型... 2个例子:ON Employee.EmployeeID = CLng([Work Order].EmployeeID);或ON CStr(Employee.EmployeeID) = [Work Order].EmployeeID

第一种方法可能需要更改其他数据库对象(查询、表单、报表),这样它们就不会因字段数据类型更改而中断。我不知道那会有多广泛(因此是痛苦的)。

第二种方法可行,但 Access 查询设计器将不再能够在设计视图中显示连接条件。如果您需要转换的值与您需要转换它们的函数不兼容,则会存在更大的问题。例如,所有这些都会抛出错误:CLng(Null)CLng(""); CLng("foo")

【讨论】:

谢谢...现在我可以修复我的报告问题,但至少它会出现。哈哈! :) 谢谢

以上是关于DoCmd.OpenReport 上的错误的主要内容,如果未能解决你的问题,请参考以下文章

从 DoCmd.OpenReport 将参数传递给 Access 2010 报告

MS.Access - 在 DoCmd.OpenReport [where 条件] 中使用 2 个过滤条件从表单打印报表

从 DoCmd OpenReport 打印报表时触发 Microsoft Access 中的事件

根据组合框输入打开报表

C# Access 报告打印代码错误

VBA根据查询运行带有参数的访问报告