C# 可用于迭代Microsoft Access数据库中所有报表上的每个控件的代码?
有人能建议使用c代码来迭代Microsoft Access数据库中所有报表上的每个控件吗?这样做的原因是,我正在将报表从Microsoft Access转换为Reporting Services,并且我希望在Access中查找所有在“控件源”属性中具有特定文本的报表 目前我正在使用Microsoft.Office.Interop.Access程序集,但我使用的代码不起作用。这是因为Access API知识有限C# 可用于迭代Microsoft Access数据库中所有报表上的每个控件的代码?,c#,ms-access,vsto,C#,Ms Access,Vsto,有人能建议使用c代码来迭代Microsoft Access数据库中所有报表上的每个控件吗?这样做的原因是,我正在将报表从Microsoft Access转换为Reporting Services,并且我希望在Access中查找所有在“控件源”属性中具有特定文本的报表 目前我正在使用Microsoft.Office.Interop.Access程序集,但我使用的代码不起作用。这是因为Access API知识有限 private static void Main(string[] args)
private static void Main(string[] args)
{
OpenDatabase();
DisplayReportElements();
Console.ReadLine();
}
private static void OpenDatabase()
{
app = new Application();
app.OpenCurrentDatabase(@"database.mdb");
app.Visible = false;
//app.OpenCurrentDatabase(@"C:\DLDWorkspace\Truama\Skills Training.mdb");
}
public static void DisplayReportElements()
{
for (int i = 0; i < app.CurrentProject.AllReports.Count - 1; i++)
{
Report report = app.Reports[i];
foreach (Control control in report.Controls)
{
Console.WriteLine("{0} - {1}", report.FormName, control.Name);
ControlProperties(control);
}
}
}
private static void Main(字符串[]args)
{
OpenDatabase();
DisplayReportElements();
Console.ReadLine();
}
私有静态void OpenDatabase()
{
app=新应用程序();
app.OpenCurrentDatabase(@“database.mdb”);
app.Visible=false;
//app.OpenCurrentDatabase(@“C:\DLDWorkspace\Truama\Skills Training.mdb”);
}
公共静态void DisplayReportElements()
{
对于(int i=0;i
以下代码生成一个异常,消息为“用于引用报告的数字无效”。联机报告=app.Reports[i];。为了解决这个问题,我通过在循环中调用app.DoCmd.OpenReport来遍历并打开每个报告。这有两个问题。1.处理300份报告需要12个多小时。二,。在大约300个(600个)报告之后,我得到了一个索引,在DisplayReportElements中的某个地方超出了范围,无法从
访问中遍历报告及其控件。应用程序您的方法是正确的。如果您发现该过程太慢或很麻烦,那么另一种方法是使用应用程序.SaveAsText
方法将所有报告转储到文本文件中
var-app=新应用程序();
app.OpenCurrentDatabase(@“C:\Users\Public\Database1.accdb”);
对于(int i=0;i
然后使用您喜爱的文本搜索工具扫描文件,查找包含“ControlSource=”的行,后跟您要查找的字符串,例如
ControlSource=“LastName”