我想以编程方式检索存储在访问数据库中的每个查询的查询文本。我正在考虑使用OleDbConnection.GetSchema或OleDbConnection.GetOleDbSchemaTable甚至ADOX来获取所需信息。我精通C#。
可以这样做吗?
您能提供一个示例或链接到好的示例吗?
答案 0 :(得分:3)
如果你打算在VBA的代码中使用它,你可以试试这样的
Dim qdef As QueryDef
Dim qdefs As QueryDefs
Dim i As Integer
Dim name As String
Dim qSql As String
Set qdefs = Application.CodeDb.QueryDefs
For Each qdef In qdefs
qname = qdef.name
qSql = qdef.SQL
Next qdef
qdef对象还会为您提供有关查询的更多信息。
对于c#,您必须将ref添加到项目以进行访问互操作(Microsoft Access ## Object Library)
并使用
private void QueryValues()
{
Microsoft.Office.Interop.Access.Application app = new Application();
app.OpenCurrentDatabase(@"C:\Tests\C#\MS Access\WindowsApplication1\New Microsoft Office Access 2007 Database.accdb", false,"");
QueryDefs qdefs = app.CurrentDb().QueryDefs;
foreach (QueryDef qdef in qdefs)
{
string qname = qdef.Name;
string qSql = qdef.SQL;
}
app.Quit(AcQuitOption.acQuitSaveNone);
}
答案 1 :(得分:2)
我上周遇到了一个非常类似的问题,我想extract view commands from a SQL server。我的第一个想法是使用ADOX,但最终无法使用SQL Server(我没有用Access测试它)。该理论认为ADOX有一个'views'集合,每个视图都有一个'command'属性。此属性包含与视图对应的SQL字符串。然后代码应该(在工具列表中声明ADOX库之后)
'corrected after @HansUp comments'
Dim cat as ADOX.catalog, _
vue as ADOX.view
Set cat = New ADOX.catalog
Set cat.activeconnection = myActiveADODBconnection
For each vue in cat.views
debug.print vue.command.commandText
Next vue
Set vue = nothing
Set cat = nothing