Извлечь определение запроса из базы данных 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.

Другие вопросы по тегам