2009-09-22 6 views
0

Je souhaite récupérer par programme le texte de requête de chaque requête stockée dans une base de données d'accès. Je pense à utiliser OleDbConnection.GetSchema ou OleDbConnection.GetOleDbSchemaTable ou même ADOX pour obtenir les informations requises. Je suis compétent en C#.Comment récupérer par programme le texte de requête de toutes les requêtes

Est-ce que cela peut être fait? Pouvez-vous fournir un exemple ou un lien vers de bons exemples?

Répondre

3

Si votre intention est d'utiliser dans le code dans la VBA vous pouvez essayer quelque chose comme ça

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 

l'objet QDEF vous donnera également beaucoup plus d'informations sur la requête.

pour C#, vous devrez ajouter l'arbitre au projet pour l'Interop d'accès (Microsoft Access ## Object Library)

et utiliser

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

Savez-vous comment j'obtiendrais l'accès à ce C#? Devrais-je utiliser ADOX? – IanT8

2

J'ai eu un problème très similaire à résoudre dernière semaine, où je voulais extract view commands from a SQL server. Ma première idée était d'utiliser ADOX, mais elle ne pouvait finalement pas fonctionner avec SQL Server (et je ne l'ai pas testé avec Access). La théorie dit qu'ADOX ​​a une collection 'views', où chaque vue a une propriété 'command'. Cette propriété contient la chaîne SQL correspondant à la vue. Code devrait alors être (après avoir déclaré la bibliothèque ADOX dans la liste des outils)

'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

Eh bien, il a été écrit «à la volée» ... Je vais mettre à jour le code merci! –

Questions connexes