Extrait requête définition de base de données JET via ADO
-
30-09-2019 - |
Question
J'ai un programme en Delphi 2010 qui utilise une base de données JET (mdb) via ADO. Je voudrais être en mesure d'extraire les définitions de quelques-unes des requêtes dans la base de données et de les afficher à l'utilisateur. Est-ce possible soit via SQL, une interface ADO ou en interrogeant la base de données elle-même (je ne semble pas avoir droit à MSysObjects).
La solution
Certaines de ces informations sont disponibles via des appels ADOX. Il y a une vue d'ensemble de l'api avec quelques exemples (malheureusement pas en Delphi) sur le site MSDN .
En fait ce que vous voulez faire est de est d'importer la bibliothèque de type ADOX, puis utilisez l'emballage qui est généré pour vous d'accéder à l'API sous-jacente. De là, est aussi simple que naviguer dans la hiérarchie pour obtenir les données dont vous avez besoin.
Vous aurez besoin d'accéder à la Voir objet , et de là obtenir la propriété de commande.
Autres conseils
Via OAC, il est assez facile. Vous extrayez la propriété SQL de chaque QueryDef. Dans DAO depuis Access, ce serait:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = DBEngine.OpenDatabase("[path/name of database]")
For Each qdf In db
Debug.Print qdf.SQL
Next qdf
Set qdf = Nothing
db.Close
Set db = Nothing
Je ne sais pas comment traduire, mais je pense que c'est la méthode la plus simple une fois que vous êtes à l'aise avec l'utilisation de DAO au lieu de ADOX.
Je ne pas utiliser ADO du tout, mais je devine qu'il a une collection de vues et la propriété SQL fonctionnerait pour les requêtes SELECT. Toutefois, si vous êtes intéressé à obtenir le SQL pour tous les QueryDefs enregistrés, vous devrez également nous de regarder les requêtes DML, de sorte que vous auriez à regarder les procédures stockées. Je dois rechercher la syntaxe pour cela, mais je suis certain que comment vous obtiendriez à l'information via ADO.