Как программно закрыть все таблицы и соединения с БД?

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Как программно закрыть все таблицы и соединения с БД?

Сообщение Alex_Y » 23 ноя 2023, 12:42

Здравствуйте.
Собственно вопрос в теме. Как программно закрыть все таблицы и соединения с БД?
В MapBasic-ке есть команды Close All и Server Disconnect. В аксиоме что-то не могу найти. Только конкретную таблицу.
Подскажите, добрые люди :)
Аватара пользователя
Дмитрий
Сообщения: 62
Зарегистрирован: 04 июн 2019, 08:33

Re: Как программно закрыть все таблицы и соединения с БД?

Сообщение Дмитрий » 23 ноя 2023, 14:52

Здравствуйте!

К сожалению, на данный момент класс подключения не вынесен в интерфейс питона. Для закрытия всех объектов можно сделать так:

for t in data_manager.all_objects:
t.close()

Или попробовать закрыть таблицы с фильтром по наименованию провайдера

for t in data_manager.tables:
if print(t.provider =='PgDataProvider'):
t.close()


В ближайшем релизе планируем вынести класс, который отвечает за единое соединение группы объектов.
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Re: Как программно закрыть все таблицы и соединения с БД?

Сообщение Alex_Y » 27 ноя 2023, 05:27

При выполнении первого кода выдает "Нeвозможно закрыть косметический слой":
RuntimeError: It is not allowed to close cosmetic table

Попробовал сделать

Код: Выделить всё

for t in data_manager.tables:
    t.close()
Но тогда окно карты закрывается не сразу, а через какое-то время. И если сразу вызывать какие-то команды, например диалог, то окно остается открытым.
Каким образом мне дождаться завершения полного закрытия, а только потом продолжить работу?

Upd: Пока победил тем, что сначала закрываю все карты, а только потом таблиц.
Ответить