我喜欢索引几个MS Access文件的内容(表)和代码(VBA,查看查询),最好是在未安装MS Access的计算机上。
我使用OleDb.OleDbConnection
来获取所有表的名称和内容。
是否可以使用OleDb.OleDbConnection
获取所有VBA模块的内容并查看MS Access数据库中的查询?我知道在SQL Server中这样的事情是可能的,因为所有存储过程或视图都存储在某些系统表中,但是我不确定MS Access。
答案 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表。