dvv |
Отправлено: 03.11.2005, 21:11 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
В состав CBuilder и (Delphi) входит программа SQL-explorer. Как только она запускается, она показывает список ODBC — источников. Далее, когда я открываю некоторыый источник (базу данных), программа показывает мне список таблиц, которые содержит база данных.
Нужно сделать тоже самое.
Следующий код возвращает список таблиц базы:
CODE | TStrings *SL = new TStringList;
ADOConnection1->GetTableNames(SL, false);
ShowMessage(SL->Text); |
Выдаеся список вида:
#temp
accounts
Akt
AmortList
AmortList
...
Однако, кроме имени таблица еще имет и владельца.
Мне приходится работать, в частности, с базой Sybase. Там при обращении к таблице владельца указывать обязательно:
SQL | Select * From dba.Akt |
Подскажите как определить владельца таблицы?
Отредактировано dvv — 03/11/2005, 21:14 |
|
AVC |
Отправлено: 04.11.2005, 09:09 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Как правило подробную информацию об объектах базы можно узнать просмотрев специальные служебные таблицы. Их названия и состав зависит от сервера и, возможно, от версии сервера. Описание этих таблиц можно найти в документации на сервер.
Так для Sybase ASA6 список таблиц и представлений хранится в SYS.SYSTABLE, список пользователей и групп в SYS.SYSUSERPERM, список процедур в SYS.SYSPROCEDURE
Пример
CODE |
-- список таблиц пользователя DBA
Select
T.table_id as CODE
,U.user_name as OWNER
,T.table_name as NAME
,T.count as ROWS
,'TABLE' as OBJECT
From
SYS.SYSTABLE as T
,SYS.SYSUSERPERM as U
Where 1 = 1
and T.table_type = 'BASE'
and T.creator = U.user_id
and U.user_name = 'DBA'
Order By
NAME
| |
|
Gedeon |
Отправлено: 04.11.2005, 09:09 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
для asa
CODE |
select
p.user_name,
t.table_name
from
SYS.SYSUSERPERM p,
SYS.SYSTABLE t
where
p.user_id = t.creator |
|
|
AVC |
Отправлено: 04.11.2005, 09:12 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
...Там при обращении к таблице владельца указывать обязательно
|
Нет, если таблица находится в схеме пользователя. |
|
Gedeon |
Отправлено: 04.11.2005, 10:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Как мы одновременно
|
|
dvv |
Отправлено: 04.11.2005, 12:35 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
QUOTE (AVC @ 04/11/2005, 09:09) | Как правило подробную информацию об объектах базы можно узнать просмотрев специальные служебные таблицы. |
Вышеупомянутая программа SQL-explorer прекрасно распознает владельцев таблиц.
Возможно SQL-explorer и лазит по служебным таблицам.
Но прекрасно распознает владельцев на разных базах.
Мне нужно точно так же. Мне нужно на разных базах.
|
|
avc* |
Отправлено: 04.11.2005, 13:28 |
|
Не зарегистрирован
|
Ну, для SQLExplorer можете посмотреть функцию DbiOpenTableList.
Очередной "универсальнй инструмент"? |
|
dvv |
Отправлено: 04.11.2005, 15:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
Не хочу показаться капризным, но мое приложение BDE не использует.
Пользуюсь ADO. А функция интерсная.
По поводу "универсального инструмента". В принципе — да.
Пользвовтель работает в окне, в котором набирает и отлаживает SQL-запрос. Хочется предложить User-у немножко сервиса. Ну что б он не вслепую писал запрос, а мог увидеть какие таблицы в базе, какие у таблиц поля, какого типа поля. Ну и содержимое таблиц посмотреть.
Так как предлагает SQLExplorer. |
|
avc* |
Отправлено: 04.11.2005, 16:16 |
|
Не зарегистрирован
|
Для ADO можно, наверное, посмотреть в его хелпах или на msdn.
QUOTE |
Пользвовтель работает в окне, в котором набирает и отлаживает SQL-запрос. Хочется предложить User-у немножко сервиса. Ну что б он не вслепую писал запрос, а мог увидеть какие таблицы в базе, какие у таблиц поля, какого типа поля. Ну и содержимое таблиц посмотреть.
|
Имею некоторый опыт работы с разными БД. Для отладки запроса я воспользуюсь средствами, наиболее подходящими для данного сервера, так как зачастую просто таблиц и полей мало. Нужны связи, индексы, процедуры и функции ...
Но это мое личное мнение. |
|
avc* |
Отправлено: 04.11.2005, 16:24 |
|
Не зарегистрирован
|
Да, еще работа с планами оптимизации. |
|
avc* |
Отправлено: 04.11.2005, 17:16 |
|
Не зарегистрирован
|
Получение списка таблиц у ADO базируется на методе OpenSchema с параметром siTables, в результате получаем поля TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE. Подозреваю, что одно из них хранит информацию о владельце.
PS. До сих пор не приходилось смотреть хелп на OpenSchema, а там достаточно занимательная информация.
|
|