您能帮我解决一个小问题吗?将不胜感激:)
所以我有一个要转换为C#的访问应用程序。实际上,它非常庞大,并且由于访问非常有限,因此需要使用多个访问数据库。现在我遇到的一个问题是用C#编写报告。我知道可以从Access将报告导出为XML格式,但是问题是客户端需要不支持SQL Server Reporting服务的SQL Server Express版本(据我所知)。因此,无论如何都可以将这些报告导入C#?还是至少是布局?
我正在使用Visual Studio 2017的Microsoft RDLC报表设计器
感谢您的时间!
编辑: 还是我可以使用C#建立报告的替代方法?
答案 0 :(得分:1)
最简单的答案是否。
访问报告在每个问题上都是特定于Access的,与RDLC完全不同。
以下是我和我的一个同伴为.Net中创建的报告制作的示例,该示例完全模仿了旧样本Northwind数据库的报告:
答案 1 :(得分:1)
今天以前我从未听说过,但这听起来很有趣。我做了一些谷歌搜索,然后发现了这一点。
MainForm类是应用程序,是开始对代码进行自顶向下评估的好地方。该应用程序仅执行三个任务。当按下“浏览...”按钮时,它将报告加载到列表框中。 隐藏收缩复制代码
// we have a valid file name so we now need to
// populate the list box with available reports
listBoxReports.Items.Clear();
// create an application object.
MsAccess.Application app = new MsAccess.Application();
// open the access database file.
app.OpenCurrentDatabase(dlg.FileName, false, "");
string sql = "SELECT [Name] FROM MSysObjects WHERE Type = -32764";
dao.Database db = app.CurrentDb();
// query the database for all the reports. all this data is
// contained in the MSysObejcts table which is invisible through
// the table listing in access.
dao.Recordset rs = db.OpenRecordset(sql, Type.Missing, Type.Missing, Type.Missing);
// go through and add all the reports to the list box.
while (!rs.EOF) {
listBoxReports.Items.Add(rs.Fields[0].Value);
rs.MoveNext();
}
// clean up
rs.Close();
rs = null;
db.Close();
db = null;
app.CloseCurrentDatabase();
app = null;
单击“打印...”按钮时,将打开所选报告,并将其发送到默认打印机。 隐藏复制代码
string report = listBoxReports.SelectedItem.ToString();
// create an application object.
MsAccess.Application app = new MsAccess.Application();
// open the access database file.
app.OpenCurrentDatabase(textBoxAccess.Text.Trim(), false, "");
app.Visible = false;
// open the report
app.DoCmd.OpenReport(report,
Microsoft.Office.Interop.Access.AcView.acViewPreview, Type.Missing,
Type.Missing, MsAccess.AcWindowMode.acWindowNormal, Type.Missing);
// print the report to the default printer.
app.DoCmd.PrintOut(MsAccess.AcPrintRange.acPrintAll, Type.Missing,
Type.Missing, MsAccess.AcPrintQuality.acHigh, Type.Missing, Type.Missing);
// cleanup
app.CloseCurrentDatabase();
app = null;
最后,当单击“保存”按钮时,选定的报告将以HTML格式保存在与Access数据库文件相同的目录中。 隐藏复制代码
// create an application object.
MsAccess.Application app = new MsAccess.Application();
// open the access database file.
app.OpenCurrentDatabase(textBoxAccess.Text.Trim(), false, "");
app.Visible = false;
// open the report
app.DoCmd.OpenReport(report, Microsoft.Office.Interop.Access.AcView.acViewPreview,
Type.Missing, Type.Missing, MsAccess.AcWindowMode.acWindowNormal, Type.Missing);
// export the report to an HTML file
app.DoCmd.OutputTo(MsAccess.AcOutputObjectType.acOutputReport,
report, "HTML (*.html)", fileName, Type.Missing, Type.Missing, Type.Missing);
// cleanup
app.CloseCurrentDatabase();
app = null;
最后,
1)From the main menu select Project > Add Reference.
2)Go to the COM tab. Scroll down and select Microsoft Access 11.0 Object Library.
3)Click Select and then click OK.
using MsAccess = Microsoft.Office.Interop.Access;
顺便说一句,考虑将Access Tables和Queries导入Python或R。如果您使用的是SQL Server Express,我猜想钱是一个问题。 Python和R都是100%免费的,并且都可以与Access完美配合。最后,Python和R都具有非常非常非常强大的报告工具。
答案 2 :(得分:0)
您可以直接导入它们吗?不。我知道没有可以使用的工具。尽管很乏味,但您应该能够在ReportViewer中重新创建它们。
答案 3 :(得分:0)
对于我来说,标记为答案的帖子不正确。 这个问题没有简单的答案。 在这里没有复制和粘贴解决方案的地方。 但是,我已经解决了类似的问题,将MS Access应用程序转换为C#程序。 报告中大多数耗时的任务都在格式化报告的外观。 我使用Crystal Reports和DevExpress报表解决方案将报表导入其报表环境。 他们工作得很好,可以为您进行所有格式化。并节省了大量无聊的时间来从头开始格式化所有报告。 但是,您只能为报表修复查询和数据库连接。因为MS Access使用了自己的SQL语法。但是这些对于程序员来说是更有趣的任务。