У меня есть программа в Delphi 2010, которая использует базу данных JET (mdb) через ADO. Я хотел бы иметь возможность извлекать определения некоторых запросов в базе данных и отображать их пользователю. Возможно ли это либо через SQL, какой-то интерфейс ADO, либо путем опроса самой базы данных (у меня, похоже, нет прав на MSysObjects).
Извлечь определение запроса из базы данных JET через ADO
Ответы (2)
Часть этой информации доступна через вызовы ADOX. Обзор API с некоторыми примерами (к сожалению, не в Delphi) есть на веб-сайт MSDN.
По сути, вам нужно импортировать библиотеку типов ADOX, а затем использовать сгенерированную для вас оболочку для доступа к базовому API. Оттуда так же просто, как перемещаться по иерархии, чтобы получить нужные данные.
Вам потребуется доступ к конкретному объекту View, и оттуда получить свойство команды.
Через DAO это довольно просто. Вы просто извлекаете свойство SQL каждого QueryDef. В DAO из Access это будет:
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
Я не знаю, как это перевести, но я думаю, что это самый простой метод, если вам удобно использовать DAO вместо ADOX.
Я вообще не использую ADO, но предполагаю, что у него есть коллекция представлений, а свойство SQL будет работать для запросов SELECT. Однако, если вы заинтересованы в получении SQL для всех сохраненных QueryDef, вам также необходимо просмотреть запросы DML, поэтому вам придется просмотреть хранимые процедуры. Мне пришлось бы искать синтаксис для этого, но я почти уверен, что именно так вы получите информацию через ADO.