如何以编程方式检索所有查询的查询文本
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 网站的所有启用语言的列表?
如何以编程方式从照片应用程序中检索所有照片/视频并将其复制到我的应用程序?