Извлечь определение запроса из базы данных JET через ADO

У меня есть программа в Delphi 2010, которая использует базу данных JET (mdb) через ADO. Я хотел бы иметь возможность извлекать определения некоторых запросов в базе данных и отображать их пользователю. Возможно ли это либо через SQL, какой-то интерфейс ADO, либо путем опроса самой базы данных (у меня, похоже, нет прав на MSysObjects).


person Larry Lustig    schedule 14.10.2010    source источник


Ответы (2)


Часть этой информации доступна через вызовы ADOX. Обзор API с некоторыми примерами (к сожалению, не в Delphi) есть на веб-сайт MSDN.

По сути, вам нужно импортировать библиотеку типов ADOX, а затем использовать сгенерированную для вас оболочку для доступа к базовому API. Оттуда так же просто, как перемещаться по иерархии, чтобы получить нужные данные.

Вам потребуется доступ к конкретному объекту View, и оттуда получить свойство команды.

person skamradt    schedule 14.10.2010
comment
Спасибо. Я нашел некоторые материалы ADOX, относящиеся к Delphi, здесь: delphi.about.com/od/database /l/aa072401a.htm. Прочитаю его и посмотрю, делает ли он то, что мне нужно. Хотя я действительно надеюсь на что-то, что я могу протолкнуть через обычный объект ADOCommand или опросить объект ADOConnection. - person Larry Lustig; 14.10.2010
comment
Я считаю, что соединение ADOX - это соединение ADO. - person skamradt; 14.10.2010
comment
Обратите внимание, что представления будут только запросами SELECT, а не запросами DML, поэтому это будет неполный результат для всех потенциально сохраненных QueryDef в базе данных Access. - person David-W-Fenton; 16.10.2010

Через 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.

person David-W-Fenton    schedule 16.10.2010