所以我试图在Access 2013中自动执行一些报表。运行报表时,出现一个对话框,询问参数(输入Plant :),类似这样。
我想要的是运行此代码而不询问查询的工厂名称。该代码有效,但是如果我运行它,它将弹出一个对话框,询问一个植物名称,如果我键入植物名称,它将运行并保存pdf文件,就像我想要的那样。 Access中的报告通过提供不同的工厂名称来工作,并且根据给定的工厂输出不同的报告。我的想法是将此代码放在循环上,并在每次迭代中传递不同的工厂名称并保存不同的新文件。但是它总是弹出一个对话框,要求手动添加植物名称。
Microsoft.Office.Interop.Access.Application oAccess = null;
// Start a new instance of Access for Automation:
oAccess = new Microsoft.Office.Interop.Access.Application();
// Open a database in exclusive mode:
oAccess.OpenCurrentDatabase(
"route DB", //filepath
true //Exclusive
);
//This doesnt work
// oAccess.DoCmd.SetParameter("[Enter Plant:]", "Arlington");
oAccess.DoCmd.OpenReport(
"06 - Security Report - Plants",
AcView.acViewReport,
"qry Security Report - Plant",
//This doesnt work either, still asks me for a plant name
"[Enter Plant:] ='Arlington'",
AcWindowMode.acWindowNormal
);
//If I give the plant name to the dialog it works correctly en saves a pdf file wit the report
oAccess.DoCmd.OutputTo(
AcOutputObjectType.acOutputReport,
System.Reflection.Missing.Value,
"PDF Format (*.pdf)",
"route to save file",
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
AcExportQuality.acExportQualityPrint
);
oAccess.Quit();
我可以访问该查询,但不幸的是我无法修改它,而且查询的时间很长,这就是为什么我无法显示它的原因(看起来它是由访问向导创建的,因此它很漂亮),尽管这里使用询问的参数的示例:
AND ((Signers.Location)=[Enter Plant:])
此参数在查询中的次数超过40次。
有什么想法吗?预先感谢!