Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Список таблиц в IB [D6, IB6.x]


Vlad_T ©   (2002-12-28 12:17:00) 

Подскажите способ получения списка существующих таблиц в базе данных.


Sergey Masloff   (2002-12-29 23:28:00) [1]

Vlad_T
>CREATE VIEW VIEW_TABLE_NAME (
> TABLE_NAME
>) AS
>SELECT DISTINCT RDB$relation_name as table_name from >RDB$USER_PRIVILEGES
>WHERE not (RDB$relation_name like "RDB$")
Это ты откидываешь системные объекты...
>and (RDB$Object_type=0)
а это отбираются только таблицы (а, непример, не ХП)
>and (RDB$relation_name<>"RDB$ROLES")
это непонятно зачем...

А если так:
select rdb$relation_name from rdb$relations where rdb$system_flag = 0
и никаких DISTINCT которые есть тормоза по сути своей ;-)


Сергєєв Володимир   (2002-12-29 22:20:00) [2]

Как все сложно....
Если хочешь сделать все правильно - смотри совет Vlad_T - все имена таблиц базы данных (а также просмотров) лежат в RDB$REALATION.

Ну, а вообще, если коннектишся к базе с правами SYSDBA, и если у тя есть хоть один IBTable с Active := TRUE, то в TableNames[i] - список всех таблиц базы. Но при этом посмотри внимательно флаги, не помню точно, там есть что-то вроде множества
[tables, views, systemdata], которое определяет включать ли в TableNames[i] таблицы, просмотры и RDB$...


myor   (2002-12-29 11:22:00) [3]


> Vlad_T (28.12.02 13:32)
> Все, разобрался. и далее...


тогда поищи таблицу rdb$user_tables или rdb$dba_tables
повторюсь, на счет ib не уверен, а, по аналогии с oracle,
если в ib есть RDB$USER_PRIVILEGES и т. д., то должны быть и rdb$user_tables, rdb$user_rules и т. д..


Vlad_T   (2002-12-28 13:32:00) [4]

Все, разобрался.
Если кому итерестно, привожу процедуту получения списка таблиц в IB: // удобнее хранить прямо на сервере :)

CREATE VIEW VIEW_TABLE_NAME (
TABLE_NAME
) AS
SELECT DISTINCT RDB$relation_name as table_name from RDB$USER_PRIVILEGES
WHERE not (RDB$relation_name like "RDB$") and (RDB$Object_type=0) and (RDB$relation_name<>"RDB$ROLES")


Mike_Goblin   (2002-12-28 13:31:00) [5]

TIBDatabase.GetTableNames

procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);

Description

Call GetTableNames to retrieve a list of tables in the associated database.

Хотя за корректность ее работы не ручаюсь


Vlad_T   (2002-12-28 12:52:00) [6]

Единственное что сработало - запрос к RDB$USER_PRIVILEGES на предмет доступных таблиц для редактирования пользователя SYSDBA. Изврат редкостный, но работает! Единственная проблема: если изменят логин админа?

Может кто-то знает как сделать красивее??


myor   (2002-12-28 12:41:00) [7]


> Уточняю - в IB можно получить подобную информация из системных
> таблиц (RDB$....) с помощью SQL запроса. Беда в том, что
> не помню имя системной таблицы!!!


наверняка не знаю, но подозреваю, что что-то вроде rdb$tables


Vlad_T   (2002-12-28 12:30:00) [8]

Уточняю - в IB можно получить подобную информация из системных таблиц (RDB$....) с помощью SQL запроса. Беда в том, что не помню имя системной таблицы!!!


passm   (2002-12-28 12:24:00) [9]

Vlad_T (28.12.02 12:17)> Ищи с системных таблицах.
В Rx Library есть DB Explorer. Там можно посмотреть список. Работает даже под DB2.


Наверх

Титульная страница Поиск, карта сайта Написать письмо