2010-10-14 2 views
0

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

ответ

1

Некоторые из этих сведений доступны через вызовы ADOX. Существует обзор api с некоторыми примерами (к сожалению, не в Delphi) на MSDN website.

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

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

+0

Спасибо. Я нашел некоторый материал ADOX для Delphi: http://delphi.about.com/od/database/l/aa072401a.htm. Прочитал бы его и посмотрел, будет ли он делать то, что мне нужно. Хотя я действительно надеюсь на что-то, что я могу пропустить через обычный объект ADOCommand или опросить объект ADOConnection. –

+0

Я считаю, что соединение ADOX является ADO-соединением. – skamradt

+0

Обратите внимание, что представления будут только запросами SELECT, а не DML-запросами, поэтому это будет неполным результатом для всех потенциальных сохраненных QueryDef в базе данных Access. –

0

Via 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 для всех сохраненных QueryDefs, вам также нужно будет просмотреть запросы DML, поэтому вам придется посмотреть хранимые процедуры. Мне нужно было бы найти синтаксис для этого, но я вполне уверен, что именно так вы получите информацию через ADO.