Страница 1 из 1

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

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

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

Добавлено: 04 май 2023, 17:32
MI user
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

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

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

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

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

Добавлено: 05 май 2023, 09:53
gamm
попробуйте

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

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

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

Добавлено: 05 май 2023, 10:18
grandred75
попробовал. ошибка та же. Таблица 19 (или еще какая-нибудь) не найдена.

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

Добавлено: 05 май 2023, 11:59
gamm
ясно, проблема в том, что при закрытии таблиц их число уменьшается. По хорошему, нужно сначала список имен пустых таблиц сделать, потом закрывать по списку, но я не помню, можно ли создать динамический массив в Мапвасике. Так что делаем тупо в лоб, будет дольше, но должно сработать :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

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

Добавлено: 10 май 2023, 17:32
grandred75
Да! Это то, что нужно! Спасибо, выручили 🤝

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

Добавлено: 05 июн 2023, 21:29
spawner
Можно просто сделать цикл с numtables до 1 :)
И закрывать последовательно

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

Добавлено: 06 июн 2023, 00:46
gamm
Кто его знает, что там происходит при закрытии и как все это перенумеруется. В лоб надежнее ...