2009-09-22 75 views
0

我想以編程方式檢索存儲在訪問數據庫中的每個查詢的查詢文本。我想使用OleDbConnection.GetSchema或OleDbConnection.GetOleDbSchemaTable甚至ADOX來獲取所需的信息。我精通C#。如何以編程方式檢索所有查詢的查詢文本

可以這樣做嗎?

您能否提供一個示例或指向好例子的鏈接?

回答

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#,你將不得不裁判添加到項目的接入互操作(的Microsoft Access ##對象庫)

,並使用

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); 
     } 
+0

你知道我將如何從C#訪問這個嗎?我需要使用ADOX嗎? – IanT8

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 
+0

嗯,它是寫在'飛'...我會更新代碼謝謝! –

相關問題