从MS Access中提取VBA

时间:2018-07-14 07:47:53

标签: .net ms-access

我喜欢索引几个MS Access文件的内容(表)和代码(VBA,查看查询),最好是在未安装MS Access的计算机上。 我使用OleDb.OleDbConnection来获取所有表的名称和内容。

是否可以使用OleDb.OleDbConnection获取所有VBA模块的内容并查看MS Access数据库中的查询?我知道在SQL Server中这样的事情是可能的,因为所有存储过程或视图都存储在某些系统表中,但是我不确定MS Access。

2 个答案:

答案 0 :(得分:1)

您需要访问“应用程序”对象来提取代码模块等内容。

仅连接数据库引擎(与Access分开)不会使您使用访问对象模型。

因此,虽然VB6,FoxPro,c#,vb.net可以将数据库引擎与应用程序对象模型分开使用,但要提取表单,报表或代码模块之类的东西,您将需要access.application对象模型。

Access是一种开发工具。您可以使用Access来构建可与Oracle或SQL Server一起使用的应用程序。因此,与Access一起使用的数据引擎通常不是内置的,而是外部数据系统。 因此,要获取Access应用程序(而不是数据引擎)的对象,则需要为此目的安装Access副本。

这与说要获取并使用Powerpoint对象模型并没有什么不同。但是,公平地讲,所有最新版本的Office商店“所有内容”都是zip文件。我将单词文件,excel文件,powerpoint文件重命名为.zip扩展名,然后只需打开该zip文件并浏览+查看所有xml,甚至是代码即可。

但是,Access是唯一一种将所有内容继续存储在二进制对象模型中的产品,因此,出于所有实际目的抓住这些对象需要Access应用程序对象来使用此类对象。 因此,尽管大多数办公文件都可以重命名为zip文件,然后您可以浏览并提取该zip容器内的xml文件,但是不幸的是,Access并不是大多数其他办公文件一样的“ zip”容器。

答案 1 :(得分:0)

对于“查询”部分

SELECT MSysObjects.Name
FROM MSysObjects
WHERE MSysObjects.Type=5;

排除此处以查看其他对象。

您可以通过在.net中创建访问对象来获取sql

Microsoft.Office.Interop.Access.Dao

请参阅:https://stackoverflow.com/a/1458873/2895831

Microsoft.Office.Interop.Access.Application app = new Application(); 
app.OpenCurrentDatabase(@"[FILENAME]", false,"");
QueryDefs qdefs = app.CurrentDb().QueryDefs;
 foreach (QueryDef qdef in qdefs)
 {
     string qname = qdef.Name;
     string qSql = qdef.SQL;
 }
 app.Quit(AcQuitOption.acQuitSaveNone);

-

要更好地理解这些表,可以进入导航窗格并取消隐藏Sys表。