Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO: таблицы, поля, связи... запрос метаданных базы 
:(
    Опции темы
youngprankster
Дата 26.3.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.3.2009

Репутация: нет
Всего: нет



Среда разработки CodeGear C++ Builder 2009.
Необходимо получать метаданные подключаемой БД: списки таблиц, полей, связи (ну, связи - не обязательно). Загвоздка в том, что должны поддерживаться различные СУБД, - в первую очередь, Access, Paradox, Interbase, Oracle.
Посему подключаюсь через ADO (dbGo-компоненты).
  • Access - работает отлично.
  • Paradox: указываю ConnectionString 
    Цитата
    Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Paradox 5.x

    подключение устанавливается, список таблиц приходит, но поля можно запросить не из всех - возникает ошибка 
    Цитата
    Объект или поставщик не может выполнить требуемую операцию

    Например, из тестовой базы
    Цитата
    Program Files\Common Files\CodeGear Shared\Data

    невозможно получить поля таблицы Events. Также невозможно получить список связей (аналогичная ошибка).
  • Intebase. Пробовал IBProvider - подключается, но ни списка таблиц, ни чего-то большего от него добиться не могу
    Цитата
    Provider=LCPI.IBProvider.3;Password=masterkey;User ID=SYSDBA;Location="";ctype=NONE;unicode_mode=False;unicode_stmt=False

    Ошибки нет, но возвращается пустое множество. Попробовал SIBProvider - примерно та же ситуация, что с Paradox. Какие-то таблицы проанализировать можно, какие-то - нет. Связи не получить
    Цитата
    Provider=sibprovi.SIBProvider;Password=masterkey;User ID=SYSDBA;Data Source="";Location="";Extended Properties="";Persist Encrypted=True;Encrypt Password=True;Mask Password=True;Cache Authentication=True;Persist Security Info=True;CHARACTER SET="";ROLE=""
  • Oracle пока не пробовал.

Списки таблиц/полей пробовал получать через ADOConnection->GetTableNames / ADOConnection->GetFieldNames и через ADOConnection->OpenSchema. Эффект, в целом, один.

Может кто-нибудь посоветовать что-нибудь smile по этой ситуации. Есть ли универсальный способ запросить у ADO вышеозначенные метаданные? Стоит ли пробовать других поставщиков данных и, если да, то каких? Может, косяк в ConnectionString'ах (к слову, путь к БД указываю в них динамически)?

P.S.: чтобы уж отдельную тему не создавать, как можно получить из некой таблицы БД только несколько строк? Ограничивать путём добавления в запрос TOP - не все СУБД его поддерживают. MaxRecords в ADOQuery тоже работает не всегда.
Any ideas? Буду благодарен за любой совет.
PM MAIL   Вверх
mrbrooks
Дата 26.3.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



youngprankster, Paradox точно не стоит - что касается остальных - странный разброс от Access до Oracle - СУБД абсолютно разных уровней. Нужно определиться, что хотим - а потом копаем глубже и шире.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.