Как найти и закрыть все пустые таблицы из MapBasic

MapInfo, MapBasic
Ответить
grandred75
Интересующийся
Сообщения: 26
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Как найти и закрыть все пустые таблицы из MapBasic

Сообщение grandred75 » 04 май 2023, 12:02

Добрый день.
Собственно, вопрос в теме. Как закрыть пустые (открытые) таблицы из MapBasic?
Последний раз редактировалось grandred75 05 май 2023, 09:06, всего редактировалось 1 раз.

Аватара пользователя
MI user
Участник
Сообщения: 63
Зарегистрирован: 14 янв 2013, 17:08
Репутация: 33
Откуда: Оренбург

Re: Как закрыть пустые таблицы

Сообщение MI user » 04 май 2023, 17:32

grandred75 писал(а):
04 май 2023, 12:02
Как закрыть пустые (открытые) таблицы из MapBasic?
Проверить количество записей в таблице:

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

TableInfo(ИМЯТАБЛИЦЫ, 8)
Затем закрыть:

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

Close Table ИМЯТАБЛИЦЫ
Примеры из справки:

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

Open Table "world" 
' ... when done using the WORLD table,
' close it by saying: 
Close Table world

grandred75
Интересующийся
Сообщения: 26
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Re: Как закрыть пустые таблицы

Сообщение grandred75 » 05 май 2023, 09:04

Честно говоря, не понял как это можно применить к моей задаче ... Тем не менее собрал вот такой код. Код работает, но как-то не до конца. Программа вылетает где-то в середине процесса. Почему, не могу разобраться

Dim n, count as Integer
Dim CurrentTable as string
For n = 1 to NumTables( )
CurrentTable = TableInfo(n , TAB_INFO_NAME)
Select * from CurrentTable
If SelectionInfo(SEL_INFO_NROWS) = 0 then
print CurrentTable
Close Table CurrentTable Interactive
else
End If
Next

gamm
Гуру
Сообщения: 4049
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение gamm » 05 май 2023, 09:53

попробуйте

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

Dim n, count, CurNum as Integer
Dim CurrentTable as string
For n = 1 to NumTables( )
  CurrentTable = TableInfo(n , TAB_INFO_NAME)
  CurNum = TableInfo(n , TAB_INFO_NROWS)
  If CurNum = 0 then
    print CurrentTable
    Close Table CurrentTable Interactive
  End If
Next

grandred75
Интересующийся
Сообщения: 26
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение grandred75 » 05 май 2023, 10:18

попробовал. ошибка та же. Таблица 19 (или еще какая-нибудь) не найдена.

gamm
Гуру
Сообщения: 4049
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение gamm » 05 май 2023, 11:59

ясно, проблема в том, что при закрытии таблиц их число уменьшается. По хорошему, нужно сначала список имен пустых таблиц сделать, потом закрывать по списку, но я не помню, можно ли создать динамический массив в Мапвасике. Так что делаем тупо в лоб, будет дольше, но должно сработать :mrgreen:

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

Dim n, count, CurNum, found as Integer
Dim CurrentTable as string
Do
  found = 0
  For n = 1 to NumTables( )
    CurrentTable = TableInfo(n , TAB_INFO_NAME)
    CurNum = TableInfo(n , TAB_INFO_NROWS)
    If CurNum = 0 then
      print CurrentTable
      Close Table CurrentTable Interactive
      found = 1
      Exit For
    End If
  Next
Loop Until found = 0

grandred75
Интересующийся
Сообщения: 26
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение grandred75 » 10 май 2023, 17:32

Да! Это то, что нужно! Спасибо, выручили 🤝

spawner
Активный участник
Сообщения: 103
Зарегистрирован: 09 окт 2009, 16:49
Репутация: 10

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение spawner » 05 июн 2023, 21:29

Можно просто сделать цикл с numtables до 1 :)
И закрывать последовательно

gamm
Гуру
Сообщения: 4049
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как найти и закрыть все пустые таблицы из MapBasic

Сообщение gamm » 06 июн 2023, 00:46

Кто его знает, что там происходит при закрытии и как все это перенумеруется. В лоб надежнее ...

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей