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

Posted

技术标签:

【中文标题】如何以编程方式检索所有查询的查询文本【英文标题】:How to programmatically retrieve query text of all queries 【发布时间】:2009-09-22 08:27:42 【问题描述】:

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

这个可以吗?

你能提供一个例子或好的例子的链接吗?

【问题讨论】:

【参考方案1】:

如果您打算在 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);
        

【讨论】:

你知道我如何从 C# 中访问它吗?我必须使用 ADOX 吗?【参考方案2】:

上周我有一个非常相似的问题要解决,我想extract view commands from a SQL server。我的第一个想法是使用 ADOX,但它最终无法与 SQL Server 一起使用(而且我没有使用 Access 对其进行测试)。该理论认为 ADOX 有一个“视图”集合,其中每个视图都有一个“命令”属性。此属性保存与视图对应的 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

【讨论】:

嗯,它是“即时”编写的……我会更新代码,谢谢!

以上是关于如何以编程方式检索所有查询的查询文本的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?

如何以编程方式检索 EPi Server 网站的所有启用语言的列表?

如何以编程方式从照片应用程序中检索所有照片/视频并将其复制到我的应用程序?

如何以编程方式将 LINQ 查询转换为正确描述 linq 表达式的可读英文文本?

Azure 流分析:如何在运行时和以编程方式更新查询?

如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?