J'ai un programme dans Delphi 2010 qui utilise une base de données JET (mdb) via ADO. Je voudrais pouvoir extraire les définitions de certaines requêtes dans la base de données et 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 de droits sur MSysObjects).Extraction de la définition de requête à partir de la base de données JET via ADO
Répondre
Certaines de ces informations sont disponibles via les appels ADOX. Il y a un aperçu de l'API avec quelques exemples (malheureusement pas dans Delphi) sur le MSDN website.
Fondamentalement, ce que vous voulez faire est d'importer la bibliothèque de types ADOX, puis d'utiliser le wrapper généré pour accéder à l'API sous-jacente. De là, c'est aussi simple que de naviguer dans la hiérarchie pour obtenir les données dont vous avez besoin.
Vous aurez besoin d'accéder au View object spécifique, et à partir de là, vous obtiendrez la propriété de commande.
Via DAO, c'est plutôt facile. Vous venez d'extraire 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 cela, 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 n'utilise pas ADO du tout, mais je suppose qu'il a une collection de vues et la propriété SQL fonctionnerait pour les requêtes SELECT. Toutefois, si vous souhaitez obtenir le SQL pour tous les QueryDefs enregistrés, vous devez également consulter les requêtes DML. Vous devez donc consulter les procédures stockées. Je devrais rechercher la syntaxe pour cela, mais je suis à peu près certain que c'est ainsi que vous obtiendriez l'information via ADO.
Merci. J'ai trouvé du matériel ADOX spécifique à Delphi ici: http://delphi.about.com/od/database/l/aa072401a.htm. Je vais le lire et voir si ça fait ce dont j'ai besoin. Bien que j'espère vraiment quelque chose je peux pousser à travers l'objet ADOCommand régulier ou interroger sur l'objet ADOConnection. –
Je crois que la connexion ADOX est une connexion ADO. – skamradt
Notez que les affichages ne sont que des requêtes SELECT, et non des requêtes DML. Il s'agit donc d'un résultat incomplet pour toutes les requêtes QueryDefs enregistrées dans une base de données Access. –