| 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, а там достаточно занимательная информация.
 
 | 
|  |