如何以编程方式检索所有查询的查询文本

时间:2009-09-22 08:27:42

标签: ms-access

我想以编程方式检索存储在访问数据库中的每个查询的查询文本。我正在考虑使用OleDbConnection.GetSchema或OleDbConnection.GetOleDbSchemaTable甚至ADOX来获取所需信息。我精通C#。

可以这样做吗?

您能提供一个示例或链接到好的示例吗?

2 个答案:

答案 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