Извлечь определение запроса из базы данных JET через ADO
-
30-09-2019 - |
Вопрос
У меня есть программа в Delphi 2010, которая использует базу данных Jet (MDB) через ADO. Я хотел бы иметь возможность извлечь определения некоторых запросов в базе данных и отобразить их пользователю. Возможно ли это либо через SQL, некоторый интерфейс ADO, либо путем опроса самой базы данных (я, похоже, не имею права на MSISObjects).
Решение
Некоторые из этой информации доступны с помощью Adox Calls. Существует обзор API с некоторыми примерами (к сожалению, не в Delphi) на Веб -сайт MSDN.
По сути, вы захотите сделать, это импортировать библиотеку типа Adox, а затем использовать обертку, созданную для вас, чтобы получить доступ к базовому API. Оттуда это так же просто, как навигация по иерархии, чтобы получить необходимые данные.
Вам нужно будет получить доступ к конкретному Посмотреть объект, и оттуда получите свойство команды.
Другие советы
Через Дао это довольно легко. Вы просто извлекаете свойство SQL каждого запроса. В Дао из доступа это было бы:
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 будет работать для избранных запросов. Однако, если вы заинтересованы в получении SQL для всех сохраненных QueryDefs, вам также нужно будет посмотреть на запросы DML, поэтому вам придется посмотреть на хранимые процедуры. Я должен был бы посмотреть синтаксис для этого, но я уверен, что именно так вы получите информацию через ADO.