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