Рабочий набор ругается на переменную

MapInfo, MapBasic
Ответить
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Рабочий набор ругается на переменную

Сообщение agentbond007 »

Здравствуйте
Составил запрос Select с применением переменной Dim X as Integer, если выборку не закрыть и сохранить рабочий набор то при его открытии пишет что "Не определена переменная X рабочий набор открыт не полностью". Как корректно составить запрос?
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Рабочий набор ругается на переменную

Сообщение Boris »

Для ответа нужет фрагмент, а лучше весь до ошибки и чуть дальше, рабочий набор. Ну и пример запроса, где без переменной не удалось обойтись.
Сама мапинфо применяет переменные в рабочем наборе, так что надо проверить, записала она туда Dim или нет. Если нет - записать самому. Рабочий набор же текстовый, в конце по хорошему должен стоять UnDim.
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

Привожу пример упрощенного кода:

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

Set Area Units "hectare" 
Dim ID As Integer
ID = Selection.ID  
Select Round(AreaOverlap(Layer1.obj, Layer2.obj),0.1) "Пересечение_Га"
From Layer1, Layer2 Where (Layer1.ID = ID) and (Layer1.obj Intersects Layer2.obj)  Into Selection 
Browse * From Selection 
Undim ID
Имеется 2 слоя Layer1 и Layer2 содержат только полигоны. Хочу получить список пересечения селектированного полигона на слое Layer1 с полигонами на слое Layer2. В список выводится площадь пересечения.
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Рабочий набор ругается на переменную

Сообщение SergS »

Попробуйте НЕ использовать имя переменной, совпадающее с именем поля таблицы в запросах. Глюк старый, не исправляющийся от версии к версии (до 8.0). Особенность синтаксического анализатора Mapinfo.
Последний раз редактировалось SergS 24 авг 2011, 09:32, всего редактировалось 1 раз.
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

За место имени переменной ID пробовал писать peremennaya, SID и SelectionID, ничего не изменилось =(
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Рабочий набор ругается на переменную

Сообщение SergS »

Знаете, попровал приведенный Вами текст - работает. без ошибок
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

Выполните данный запрос и сохраните запрос в рабочем наборе потом откройте рабочий набор, интересно что скажет?
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Рабочий набор ругается на переменную

Сообщение SergS »

да так и сделал, только добавил в рабочий набор строки
dim id as integer
id=selection.id
...

undim id
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

Я не знаю решит ли пользователь сохранять рабочий набор, может он выполнит запрос и закроет программу, а потом выберет "Восстановить прошлый сеанс". И что теперь эту переменную записывать во все рабочие наборы?
Есть ли другой вариант составления запроса без редактирования (руками) рабочего набора?
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Рабочий набор ругается на переменную

Сообщение Boris »

То есть вопрос плавно расширился до следующего: "Можно ли стандартными средствами сохранить в рабочий набор объявление переменных, использованных в сеансе? "
Полагаю, что нет.
Но ведь все равно надо еще и значение переменной сохранить? Или нет?
Если все это все равно приходиться писать в виде макроса, но следует добавить и отдельный макрос на сохранение.
Надо только проверить, если переменную один раз описать в рабочем наборе при пересохранении рабочего набора пользователем она там оставется?
Если нет, то придеться отслеживать сеанс закрытия рабочего набора и дописывать ее туда.
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

Да, получается надо сохранять переменную и её значение, а это не то что надо и фиг его знает как.
Не нашел ничего лучше как отстегнуть галочку "Сохранять Запросы в Рабочем наборе".
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Рабочий набор ругается на переменную

Сообщение SergS »

мда, что-то у вас сложно получается...
я так понял, вы заставляете пользователя выполнить все эти команды в окне мапбасика?
и на каждый запрос, необходимый в работе составляете такой набор команд?
а не лучше (вам конечно лучше знать, но все таки...) откомпилировать эти же самые команды в модули mbx,
повесить каждый из них на кнопку (или пункт меню), обозвать по человечески и отдать в пользование?
кстати, при этом снимается проблема возникновения переменных в запросах, сохраняемых в рабочих наборах - вместо них подставятся их значения.
Boris писал(а):Надо только проверить, если переменную один раз описать в рабочем наборе при пересохранении рабочего набора пользователем она там оставется?
нет, не останется :(
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Рабочий набор ругается на переменную

Сообщение agentbond007 »

Да ну что вы??? =)) :lol: Никого я не заставляю, наоборот автоматизирую. Вся автоматизация в связке Delphi + OLE MapInfo. Пользователь нажимает на "те же" кнопки только в моей программе.
Скорей всего никак это не сделать. Как обеспечить сохранность записи для сохраненного значения в переменной? Открыл рабочий набор воспользовался запросом - все что надо и куда надо сохранилось. Открыл просто таблицу удалил эту запись, потом открыл рабочий набор значение переменной есть, а записи нет и опять приехали...
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Рабочий набор ругается на переменную

Сообщение reasonat »

если все что надо сохраняется куда надо, то запрос из мапинфо сразу лучше удалить, чтоб потом пользователь не сохранял его в рабочем наборе, если ему все же понадобится рабочий набор.
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Рабочий набор ругается на переменную

Сообщение Boris »

сразу не получиться - тогда пользователь н еувидит результата запроса. может проще подменить кнопку и строку меню "запись в рабочий набор"?
Ответить

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

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

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