DoCmd.OpenReport出错

时间:2014-01-15 16:13:34

标签: ms-access report access-vba runtime-error

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

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

有人可以帮助我找到错误的底部...

取消链接......

1 个答案:

答案 0 :(得分:0)

当您单击该按钮时,这是 btnInvoicePreview_Click()行,它会触发错误#3615,&#34;在表达式中键入不匹配。&#34; < / p>

DoCmd.OpenReport "Invoice", acPreview

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

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是Text数据类型。因此,您会收到&#34;类型不匹配&#34; 错误,因为查询要求使用文本字段加入数字字段。

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

  1. 更改一个表中的字段类型,以便两个字段具有相同的数据类型,或者至少是兼容的数据类型
  2. 转换为1的数据类型以匹配其他数据类型... 2示例:ON Employee.EmployeeID = CLng([Work Order].EmployeeID);或ON CStr(Employee.EmployeeID) = [Work Order].EmployeeID
  3. 第一种方法可能需要更改其他数据库对象(查询,表单,报告),以便它们不会因字段数据类型更改而中断。我不知道会有多广泛(因此也很痛苦)。

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