我的团队有许多 Access 数据库文件,它们在其表单类中使用 VB 来调用存储过程。
我希望能够在这些 accdb 文件中搜索访问类对象以获取存储过程名称,但 Microsoft Visual Basic for Applications 似乎不支持一次搜索所有类定义。
有没有办法在 accdb 文件中搜索所有访问类对象以查找字符串?
您可以使用隐藏的Application.SaveAsText
VBA 方法将表单转储到文本文件,然后使用您最喜欢的搜索工具(可能是grepWin之类的工具)在文件中翻找那些 SP 名称。转储表单的代码如下所示:
Sub DumpFormsToText()
Dim frm As Variant
Const OutFolder = "C:\__tmp\FormDump\"
For Each frm In Application.CurrentProject.AllForms
Application.SaveAsText acForm, frm.Name, OutFolder & frm.Name & ".txt"
Next
Set frm = Nothing
End Sub
VBA 解决方案没有为我打印 CodeBehindForm 部分,但我确实使用互操作库获得了成功。
using Microsoft.Office.Interop.Access;
using System;
namespace AccessExporter
{
class Program
{
static void Main(string[] args)
{
ApplicationClass app = new ApplicationClass();
String fileName = @"C:\AccessFile.accdb";
app.Visible = false;
app.OpenCurrentDatabase(fileName);
foreach (AccessObject obj in app.CurrentProject.AllForms)
{
Console.WriteLine(obj.Name);
app.SaveAsText(AcObjectType.acForm, obj.Name, String.Format(@"C:\{0}.txt", obj.Name));
}
app.CloseCurrentDatabase();
}
}
}