Вниз
Скачать: CL | DM;

Список таблиц в IB   Найти похожие ветки 

← →
Vlad_T   (2002-12-28 12:17) [0]

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


← →
passm ©   (2002-12-28 12:24) [1]

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


← →
Vlad_T   (2002-12-28 12:30) [2]

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


← →
myor ©   (2002-12-28 12:41) [3]


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


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


← →
Vlad_T   (2002-12-28 12:52) [4]

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

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



← →
Mike_Goblin ©   (2002-12-28 13:31) [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 13:32) [6]

Все, разобрался.
Если кому итерестно, привожу процедуту получения списка таблиц в 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")


← →
myor ©   (2002-12-29 11:22) [7]


> 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 и т. д..


← →
Сергєєв Володимир ©   (2002-12-29 22:20) [8]

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

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


← →
Sergey Masloff   (2002-12-29 23:28) [9]

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 которые есть тормоза по сути своей ;-)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.014 c
8-72413
neodiX
2002-10-08 16:45
2003.01.23
Как правильно и быстро сравнить два bitmap a?


3-72162
Aleksandr
2003-01-04 13:46
2003.01.23
Не знаю, отчего ошибка проявляется... Но явно не от написанного.


3-72049
Ops
2003-01-04 13:27
2003.01.23
Оптимизировать SQL запрос.


6-72433
dim-
2002-11-25 09:36
2003.01.23
Переслать картинку по сети


3-72130
АндрейР
2003-01-01 21:00
2003.01.23
Числовые поля в Интербейс




   Наверх