Помогите динамически удалить таблицу с исп. C++ Builder

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Антон_Пл
Сообщения: 4
Зарегистрирован: 23 окт 2005, 19:32

Помогите динамически удалить таблицу с исп. C++ Builder

Сообщение Антон_Пл » 23 окт 2005, 19:48

Пишу на C++ Builder 6.0 (так получилось). ЕСть база данных на IB 6.0
Есть программа на Builder'e, надо сделать так, чтобы из базы данных удалялась таблица, когда пользователь нажмет на кнопку. Пробовал чере IBSQL - пишет, что таблица кем-то используется. Пробовал даже закрыть один IBDatabase и удалять через другой - тот же эффект.
Может кто-нибудь знает способ удалить таблицу или хотя бы кто ее использует, если IBDatabase разъединена.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 окт 2005, 19:58

Такого способа нет. Если, например, файл кем то открыт, то его удалить нельзя. Здесь схема точно такая же. Пока таблица используется, удалить ее нельзя. Следовательно - надо закрыть те соединения, которые используют таблицу (обращались к ней или к ее индексам).

Антон_Пл
Сообщения: 4
Зарегистрирован: 23 окт 2005, 19:32

Сообщение Антон_Пл » 23 окт 2005, 20:37

В том-то и дело - "убиваю " всё, что с неё работало, открываю с помощью другого обьекта IBDatabase, но все равно "table in use"

Антон_Пл
Сообщения: 4
Зарегистрирован: 23 окт 2005, 19:32

Сообщение Антон_Пл » 23 окт 2005, 20:48

Собственно в этом и заключается вторая половина вопроса: как в ходе выполнения приложения сначала отключиться от базы , а потом подключиться к ней. Если делать это с помощью connected = false, connected = true , то все равно остается " table in use"

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 24 окт 2005, 08:52

Среда программирования закрыта? Или просто жмакаем Ф9 и потом долго думаем кто ж таблицу-то за уши держит...
А вообще-то менять метаданные на ходу крайне геморно и тормозно.

Антон_Пл
Сообщения: 4
Зарегистрирован: 23 окт 2005, 19:32

Сообщение Антон_Пл » 25 окт 2005, 19:54

Вообще-то среду как раз и не закрыл, из-за этого и глюкнуло. Нашел сам через час, просто от этой возможности зависело пол-проекта, вот и полез сразу за помощью. А насчет динамического изменения метаданных - мне надо хранить списки людей и организаций с абсолютно разными свойствами, другого способа, как создание новых таблиц не нашел. Ну и естественно эти таблицы надо периодически удалять. Может можно как-то обойтись без новых таблиц?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 окт 2005, 20:34

Может можно как-то обойтись без новых таблиц?
кривой дизайн. "На ходу" таблицы создают разве что для временных целей. Странно, что ты не оценил объемы программирования для реализации приложения, работающего с таблицами структуры, меняющейся динамически.
другого способа, как создание новых таблиц не нашел.
на сайте есть статьи про деревья и хранение объектов в БД.
мне надо хранить списки людей и организаций с абсолютно разными свойствами
как правило, не бывает. у организаций свойства перечислимы, это 100%, благодаря тому, что каждая организация подлежит государственной регистрации. У людей свойства (атрибуты) тоже вполне перечислимы.

Если бы ты вел речь например про здания, у которых и правда есть разные атрибуты, или про задачу моделирования пластиковых окон - и то в этих областях вполне все решаемо без динамического создания таблиц и тем более без добавления-удаления полей таблиц "на ходу".

Ответить