|
|
|
ADO: таблицы, поля, связи...
|
|||
|---|---|---|---|
|
#18+
Не совсем уверен, что "попал" разделом. Если что, поправьте. Среда разработки 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. Эффект, в целом, один. Может кто-нибудь посоветовать что-нибудь :) по этой ситуации. Есть ли универсальный способ запросить у ADO вышеозначенные метаданные? Ст о ит ли пробовать других поставщиков данных и, если да, то каких? Может, косяк в ConnectionString'ах (к слову, путь к БД указываю в них динамически)? P.S.: чтобы уж отдельную тему не создавать, как можно получить из некой таблицы БД только несколько строк? Ограничивать путём добавления в запрос TOP - не все СУБД его поддерживают. MaxRecords в ADOQuery тоже работает не всегда. Any ideas? Буду благодарен за любой совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2009, 14:08 |
|
||
|
ADO: таблицы, поля, связи...
|
|||
|---|---|---|---|
|
#18+
youngprankster Intebase . Пробовал IBProvider - подключается, но ни списка таблиц, ни чего-то большего от него добиться не могуавторProvider=LCPI.IBProvider.3;Password=masterkey;User ID=SYSDBA;Location="";ctype=NONE;unicode_mode=False;unicode_stmt=FalseОшибки нет, но возвращается пустое множество. Немного с опозданием, но лучше поздно чем никогда :) Есть такая проблема. Причина кроется в Client Cursor Engine. Оно не любит нестандартные колонки в схемах метаданных. В силу тупости его реализации. Как вариант - юзайте серверный курсор. См. свойство на уровне TADOConnection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2009, 17:24 |
|
||
|
|

start [/forum/topic.php?fid=17&tid=1351757]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
30ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 375ms |

| 0 / 0 |
