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

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

Как узнать, существует ли таблица ? [D6, IB6.x]


sveloga ©   (2003-02-03 08:49:00) 

Требуется узнать существует ли данная таблица в базе InterBase ? Как это сделать ?
Так что-то криво выглядит:
try
.....
except
.....
on E: EIBInterBaseError do


Sergey Masloff   (2003-02-04 15:42:00) [1]

2)так и не работает

select count(*) from rdb$relations
where rdb$relation_name =:MAIN
MAIN это параметр ты ему значение присвоил?
Если не параметр то в кавычках надо а двоеточие убрать. Приведенный мною запрос работает 100% можешь не сомневаться


Val   (2003-02-04 12:20:00) [2]

select rdb$relation_name
from rdb$relations
where (rdb$system_flag = 0) and
(rdb$view_source is null) and
(rdb$relation_name = "MY_TABLE_NAME")


sveloga   (2003-02-04 11:45:00) [3]

Чем дальше в лес....

1)Почему не работает такая выборка (взято из книги)? просто интересно стало.

select Rdb$relation_name from rdb$relations
where RDB$relation_name NOT Like "RDB$%"

говорит что Column unknown RDB$%, имхо с синтаксисом что-то не то... как должно быть ?

2)так и не работает

select count(*) from rdb$relations
where rdb$relation_name =:MAIN

выдает COUNT - 0

где MAIN - это имя таблицы, которая точно существует, в этом же регистре.


Sergey Masloff   (2003-02-04 09:02:00) [4]

Sirus ©
>Исползуй обычные компоненты типа TQuery и тода все будет ОК...
>При создании таблицы видны без перезапуска...
Ага, щаз ;-) То что BDE делает что-то за тебя не значит что этого не происходит. А, учитывая что ты не знаешь что она еще делает там "за сценой" и потенциальные конфликты версий BDE, совет использования TQuery (и, соответственно, BDE) для работы с IB выглядит сомнительным

sveloga © (04.02.03 04:26)
>Через IBQuery SQL =: "select count(*) tblcount from >rdb$relations where >where rdb$relation_name = :YOUR_TABLE_NAME"
>Так ?
так
>А кто мне вернет результат ?
Fields[0].AsInteger

или измени запрос подставив псевдоним для выбираемого значения:
select count(*) tblcount from ...
Соответственно будет FieldByName("tblcount").AsInteger

Не забудь что поиск в RDB$RELATIONS будет с учетом регистра символов, то есть "MyTable"<>"MYTABLE"


Sirus   (2003-02-04 07:32:00) [5]

Исползуй обычные компоненты типа TQuery и тода все будет ОК...
При создании таблицы видны без перезапуска...


DarkGreen   (2003-02-04 06:00:00) [6]

С системными таблицами можно работать так же как и с пользовательскими, вот только данные туду ручками добавлять не стоит. Прочитать про системные таблицы, их использование и назначение можно на
http://ibase.ru
http://interbase-world.ru

Приложение не видит созданную таблицу из-за того, что ты транзакцию не закоммитил
IBQuery1.Transaction.Commit;


sveloga   (2003-02-04 04:26:00) [7]

по причине моей чайниковости я не знаю как работать с систамными таблицами. Можно несколько подробнее ?
Через IBQuery SQL =: "select count(*) from rdb$relations where where rdb$relation_name = :YOUR_TABLE_NAME"
Так ?
А кто мне вернет результат ?

+ еще вопрос:

Создаю таблицу в базе, но приложение ее не видет до того пока не перезапустишь приложение.


mr_ivan   (2003-02-03 09:36:00) [8]

Да и если покопаться в системных таблицах rdb$... можно узнать есть ли индексы тригера и т.п посмотри очень интересно!!


Sergey Masloff   (2003-02-03 09:07:00) [9]

select count(*) from rdb$relations where where rdb$relation_name = :YOUR_TABLE_NAME


Наверх

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