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

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

Добавлено: 23 авг 2011, 12:09
agentbond007
Здравствуйте
Составил запрос Select с применением переменной Dim X as Integer, если выборку не закрыть и сохранить рабочий набор то при его открытии пишет что "Не определена переменная X рабочий набор открыт не полностью". Как корректно составить запрос?

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

Добавлено: 23 авг 2011, 18:42
Boris
Для ответа нужет фрагмент, а лучше весь до ошибки и чуть дальше, рабочий набор. Ну и пример запроса, где без переменной не удалось обойтись.
Сама мапинфо применяет переменные в рабочем наборе, так что надо проверить, записала она туда Dim или нет. Если нет - записать самому. Рабочий набор же текстовый, в конце по хорошему должен стоять UnDim.

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

Добавлено: 24 авг 2011, 04:34
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. В список выводится площадь пересечения.

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

Добавлено: 24 авг 2011, 08:44
SergS
Попробуйте НЕ использовать имя переменной, совпадающее с именем поля таблицы в запросах. Глюк старый, не исправляющийся от версии к версии (до 8.0). Особенность синтаксического анализатора Mapinfo.

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

Добавлено: 24 авг 2011, 09:01
agentbond007
За место имени переменной ID пробовал писать peremennaya, SID и SelectionID, ничего не изменилось =(

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

Добавлено: 24 авг 2011, 09:15
SergS
Знаете, попровал приведенный Вами текст - работает. без ошибок

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

Добавлено: 24 авг 2011, 09:25
agentbond007
Выполните данный запрос и сохраните запрос в рабочем наборе потом откройте рабочий набор, интересно что скажет?

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

Добавлено: 24 авг 2011, 09:29
SergS
да так и сделал, только добавил в рабочий набор строки
dim id as integer
id=selection.id
...

undim id

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

Добавлено: 24 авг 2011, 10:02
agentbond007
Я не знаю решит ли пользователь сохранять рабочий набор, может он выполнит запрос и закроет программу, а потом выберет "Восстановить прошлый сеанс". И что теперь эту переменную записывать во все рабочие наборы?
Есть ли другой вариант составления запроса без редактирования (руками) рабочего набора?

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

Добавлено: 24 авг 2011, 12:08
Boris
То есть вопрос плавно расширился до следующего: "Можно ли стандартными средствами сохранить в рабочий набор объявление переменных, использованных в сеансе? "
Полагаю, что нет.
Но ведь все равно надо еще и значение переменной сохранить? Или нет?
Если все это все равно приходиться писать в виде макроса, но следует добавить и отдельный макрос на сохранение.
Надо только проверить, если переменную один раз описать в рабочем наборе при пересохранении рабочего набора пользователем она там оставется?
Если нет, то придеться отслеживать сеанс закрытия рабочего набора и дописывать ее туда.

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

Добавлено: 24 авг 2011, 13:11
agentbond007
Да, получается надо сохранять переменную и её значение, а это не то что надо и фиг его знает как.
Не нашел ничего лучше как отстегнуть галочку "Сохранять Запросы в Рабочем наборе".

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

Добавлено: 24 авг 2011, 17:00
SergS
мда, что-то у вас сложно получается...
я так понял, вы заставляете пользователя выполнить все эти команды в окне мапбасика?
и на каждый запрос, необходимый в работе составляете такой набор команд?
а не лучше (вам конечно лучше знать, но все таки...) откомпилировать эти же самые команды в модули mbx,
повесить каждый из них на кнопку (или пункт меню), обозвать по человечески и отдать в пользование?
кстати, при этом снимается проблема возникновения переменных в запросах, сохраняемых в рабочих наборах - вместо них подставятся их значения.
Boris писал(а):Надо только проверить, если переменную один раз описать в рабочем наборе при пересохранении рабочего набора пользователем она там оставется?
нет, не останется :(

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

Добавлено: 25 авг 2011, 02:19
agentbond007
Да ну что вы??? =)) :lol: Никого я не заставляю, наоборот автоматизирую. Вся автоматизация в связке Delphi + OLE MapInfo. Пользователь нажимает на "те же" кнопки только в моей программе.
Скорей всего никак это не сделать. Как обеспечить сохранность записи для сохраненного значения в переменной? Открыл рабочий набор воспользовался запросом - все что надо и куда надо сохранилось. Открыл просто таблицу удалил эту запись, потом открыл рабочий набор значение переменной есть, а записи нет и опять приехали...

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

Добавлено: 25 авг 2011, 08:12
reasonat
если все что надо сохраняется куда надо, то запрос из мапинфо сразу лучше удалить, чтоб потом пользователь не сохранял его в рабочем наборе, если ему все же понадобится рабочий набор.

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

Добавлено: 25 авг 2011, 12:57
Boris
сразу не получиться - тогда пользователь н еувидит результата запроса. может проще подменить кнопку и строку меню "запись в рабочий набор"?