我有一个连接到MS Access 2010数据库的Visual Basic 2013程序。程序计算并将值写入DB后,我需要打印Access DB中的报告。
我已经读完了这个:How To Automate Microsoft Access From Visual Basic .NET
我发现了类似的问题:Vb.Net preview report from access database但他们没有使用DoCmd.OpenReport方法。
我现在的代码如下:
Imports Access = Microsoft.Office.Interop.Access
Public Class FrmReports
Dim oAccess As Access.application
Private Sub btnSumByPlan_Click(sender As Object, e As EventArgs) Handles btnSumByPlan.Click
oAccess = CreateObject("Access.Application")
oAccess.visible = True
oAccess.opencurrentdatabase ("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\CLI_CRVM.accdb")
oAccess.docmd.openreport(ReportName:="SumByPlan", View:=Access.AcView.acViewPreview)
End Sub
End Class
此代码编译但运行时出现以下错误:
未处理的类型' System.InvalidCastException'发生在CLI CRVM.exe
中其他信息:无法转换类型为' Microsoft.Office.Interop.Access.ApplicationClass'的COM对象。分类ype' CLI_CRVM.Access.applicationclass'。表示COM组件的类型实例不能转换为不代表COM组件的类型;但是只要底层的COM组件支持对接口的IID的QueryInterface调用,它们就可以转换为接口。
提前致谢。
答案 0 :(得分:1)
OpenCurrentDatabase()
对象的Access.Application
方法的参数只是数据库文件的位置,而不是OLEDB连接字符串。你的陈述应该更像是
oAccess.OpenCurrentDatabase("C:\path\to\CLI_CRVM.accdb")
此外,我无法确定|DataDirectory|
在这种情况下是否有意义,但我对此表示高度怀疑。