Изменение структуры таблиц пакетно
-
- Участник
- Сообщения: 52
- Зарегистрирован: 24 ноя 2009, 22:53
- Репутация: 0
Изменение структуры таблиц пакетно
Доброго времени суток!
Меня интересует вопрос как можно изменить структуру нескольких таблиц пакетно. Подскажите пожалуйста как это сделать на MapBasic.
Меня интересует вопрос как можно изменить структуру нескольких таблиц пакетно. Подскажите пожалуйста как это сделать на MapBasic.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Изменение структуры таблиц пакетно
попробуйте так: откройте таблицу в мапинфо; включите отображение окна мапбайсик; измените поля в таблице и нажмите "ОК"; проанализируйте команды, которые будут выведены в окно мапбайсика.
-
- Участник
- Сообщения: 52
- Зарегистрирован: 24 ноя 2009, 22:53
- Репутация: 0
Re: Изменение структуры таблиц пакетно
У меня получилось вот так:
Alter Table "kv8" ( drop KODSUB,NAMESUB,NOMLESX,NAMELESX,NOMLESN,NAMELESN add NOMLESUCH Decimal(2,0),NAMELESUCH Char(30) order NOMLES,NAMELES,NOMULES,NAMEULES,NOMLESUCH,NAMELESUCH,NOMKVR) Interactive
Что дальше нужно сделать? Я просто только начинаю учиться MapBasic
Alter Table "kv8" ( drop KODSUB,NAMESUB,NOMLESX,NAMELESX,NOMLESN,NAMELESN add NOMLESUCH Decimal(2,0),NAMELESUCH Char(30) order NOMLES,NAMELES,NOMULES,NAMEULES,NOMLESUCH,NAMELESUCH,NOMKVR) Interactive
Что дальше нужно сделать? Я просто только начинаю учиться MapBasic
-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: Изменение структуры таблиц пакетно
а дальше зацикливаете весь этот фрагмент:
здесь кроется несколько засад, главная из которых - предположение об едентичности структур - имею ввиду наличие перечисленных полей, даже не их порядок. Но, в принципе все обходится с использованием OnError.
Код: Выделить всё
dim i as integer
dim tlist() as string ' массив имен таблиц - формируете его дополнительно, например в диалоге, или все таблицы в каталоге, или еще как. главное, чтоб на момент появления оператора ALTER таблица была открыта.
.......
for i = 1 to ubound(tlist)
Alter Table tlist(i) ( drop KODSUB,NAMESUB,NOMLESX,NAMELESX,NOMLESN,NAMELESN add NOMLESUCH Decimal2,0), NAMELESUCH Char(30) order NOMLES,NAMELES,NOMULES,NAMEULES,NOMLESUCH,NAMELESUCH,NOMKVR)
next
-
- Участник
- Сообщения: 52
- Зарегистрирован: 24 ноя 2009, 22:53
- Репутация: 0
Re: Изменение структуры таблиц пакетно
то есть после "as string ' " я формирую список открытых таблиц,
потом в мапинфо в окне мапбейсика ввожу весь этот код и все работает?
потом в мапинфо в окне мапбейсика ввожу весь этот код и все работает?
-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: Изменение структуры таблиц пакетно
не, не работает....
в окне mapbasic циклы не работают.
этот код надо оформить как программу и откомпилировать в mapbasic. изапускать получившийся mbx как программу в mapinfo
в окне mapbasic циклы не работают.
этот код надо оформить как программу и откомпилировать в mapbasic. изапускать получившийся mbx как программу в mapinfo
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Изменение структуры таблиц пакетно
Вроде все верно. Я давно не пробовал что-то делать через среду MapBasic'а, т.к. ее возможности к интерактивности и удобству использования функций ОС ужасны.
Для массовой обработки таблиц мне всегда хватает командной строки Windows (cmd)и оператора FOR, который позволяет строить набор команд для мапбайсика. В прочем подойдет любой язык программирования. умеющий создавать текстовые файлы. Окно мапбайсика в маинфо не умет выполнять команды цикла и условий, все остальные команды она выполняет. Поэтому, если в это окно загрузить последовательность команд мапбайсик, выделить их все и нажать ВВОД, то они все строчка за строчкой и выполняться. Можно и по одной строке нажимать ввод, что бы отладить работу.
Для организации единой работы, что бы не заморачиваться на имя таблицы, я использую оператор открыть
с фиксированным именем на пример,
тогда все дальнейшие операции можно выписать единообразно для таблицы с именем А, главное не забывать закрывать эту таблицу перед загрузкой следующей:
В силу своей крайней ленивости, и для массовой обработки я держу скрипт-файл на языке VBS. Как известно VBS встроен в любую OC Windows (вернее в Intrenet Explorer от версии 5.0 и выше), который берет любой текстовый файл с командами на языке mapBasic, без циклов и проверок условий, и скармливает его построчно запущенной копии MapInfo:
Для массовой обработки таблиц мне всегда хватает командной строки Windows (cmd)и оператора FOR, который позволяет строить набор команд для мапбайсика. В прочем подойдет любой язык программирования. умеющий создавать текстовые файлы. Окно мапбайсика в маинфо не умет выполнять команды цикла и условий, все остальные команды она выполняет. Поэтому, если в это окно загрузить последовательность команд мапбайсик, выделить их все и нажать ВВОД, то они все строчка за строчкой и выполняться. Можно и по одной строке нажимать ввод, что бы отладить работу.
Для организации единой работы, что бы не заморачиваться на имя таблицы, я использую оператор открыть
Код: Выделить всё
Open Table filename [ As tablename ]
Код: Выделить всё
Open Table "c:\temp\temp001.tab" As A
Код: Выделить всё
Close Table A
-
- Участник
- Сообщения: 52
- Зарегистрирован: 24 ноя 2009, 22:53
- Репутация: 0
Re: Изменение структуры таблиц пакетно
Я чет совсем запутался( Как мне лучше сделать? Использовать vbs файл или скомпилировать mbx?
Еще вопрос vbs файл нужно запускать через командную строку или как-то по-другому?
Большая просьба опишите на данном примере как все сделать от начала и до конца с vbs файлом.
Еще вопрос vbs файл нужно запускать через командную строку или как-то по-другому?
Большая просьба опишите на данном примере как все сделать от начала и до конца с vbs файлом.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Изменение структуры таблиц пакетно
VBS Файл запускается из командной строки, что позволяет использовать его в условных командах командной строки. В частности FOR, а это позволяет организовать массовую обработку файлов. На пример,
выведет на экран список всех TAB файлов текущего каталога.
Если все таблицы имеют единую структуру, то для их обработки надо выполнить задачу, которая делиться на две части:
а) открыть верную таблицу в неким фиксированным именем - это легко делается приведенной выше командой
б) выполнить для таблицы А (это имя внутри MapInfo) - набор фиксированных команд, коотрые можно заранее выписать в любом текстовом редакторе. пусть они лежат в файле с названием 1.txt
Тогда из командной строки набираем:
Если нет времени, желания или привычки использовать командную строку - не мучьте себя пишите все на mapBasic'е. Хотя с тем же успехом можно использовать и любой другой более дружественный язык программирования, связываясь с MapInfo Через OLE интрефейс. В старых хелпах по mapBasic'у был раздел Integrated Mapping, описывались функции для общения, в новых что-то он ужат до крайности.
Код: Выделить всё
FOR %a in (*.tab) do @echo "%~fa"
Если все таблицы имеют единую структуру, то для их обработки надо выполнить задачу, которая делиться на две части:
а) открыть верную таблицу в неким фиксированным именем
Код: Выделить всё
open Table "c:\mytab.tab" As A
б) выполнить для таблицы А (это имя внутри MapInfo) - набор фиксированных команд, коотрые можно заранее выписать в любом текстовом редакторе. пусть они лежат в файле с названием 1.txt
Тогда из командной строки набираем:
Код: Выделить всё
FOR %a in (*.tab) do @echo open Table "%~fa" As A > miCmd.txt & copy /a miCmd.txt+1.txt miCmd.txt & doMapbasic_in_MapInfo.vbs miCmd.txt
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 5 гостей