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

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

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

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

链接已删除...

【问题讨论】:

    标签: ms-access report vba runtime-error


    【解决方案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" 错误,因为查询要求将数字字段与文本字段连接起来。

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

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

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

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

    【讨论】:

    • 谢谢...现在我可以修复我的报告问题,但至少它会出现。哈哈! :) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多