Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可用于迭代Microsoft Access数据库中所有报表上的每个控件的代码?_C#_Ms Access_Vsto - Fatal编程技术网

C# 可用于迭代Microsoft Access数据库中所有报表上的每个控件的代码?

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)

有人能建议使用c代码来迭代Microsoft Access数据库中所有报表上的每个控件吗?这样做的原因是,我正在将报表从Microsoft Access转换为Reporting Services,并且我希望在Access中查找所有在“控件源”属性中具有特定文本的报表

目前我正在使用Microsoft.Office.Interop.Access程序集,但我使用的代码不起作用。这是因为Access API知识有限

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”