Выражение "rowid" в подписях

MapInfo, MapBasic
Ответить
Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Выражение "rowid" в подписях

Сообщение ginpetr » 21 июн 2011, 19:35

Здравствуйте!
Появилась задача: к объектам таблицы подписями проставить порядковые номера. Но такие, чтоб не были записаны в полях таблицы, а как бы "динамически" создавались при выборе группы объектов. Вроде ничего сложного написать в выражении подписей "rowid", но беда в том что таблица - результат запроса, а во временных таблицах к каждому объекту почему-то подписывает одинаковое число, равное количеству записей в данном запросе. Поэтому "rowid" отпадает (видимо мапинфошный глюк, сохранившийся и в версии 10.5).
Выход вижу в том, чтобы SQL запрос формировал отдельную колонку (полноценную, а не скрытую как rowid) с порядковыми номерами записей таблицы, но как это сделать не знаю. И возможно ли вообще?

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

Re: Выражение "rowid" в подписях

Сообщение SergS » 22 июн 2011, 04:55

можете привести текст sql-запроса?
впервые слышу о таком глюке, может он только в 10.5 впервые выплыл?

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Выражение "rowid" в подписях

Сообщение ginpetr » 22 июн 2011, 08:24

Запрашиваю объекты по какому-либо признаку (вроде "поле"=1, без группировки) (даже просто выбрав вручную), отображаю выборку на карте и в подписях пишу "rowid". Результат - все объекты подписаны одинаково, чаще всего числом равным количеству объектов в выборке. Хотя для базовых таблиц всё работает как положено.
Поэтому я хочу воспользоваться SQL запросом с созданием новой колонки эквивалентной rowid (например "номер"), но не скрытой. Хочу чтобы такая колонка создавалась именно в запросе без дополнительных операций, для возможности сохранения в рабочем наборе. Пробовал добавлять её как временную колонку, но безуспешно, ввиду установленного чёткого порядка команд в рабочем наборе (select строго после open и add column).
Вот я и прошу помощи в написании такого запроса, если это возможно.

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

Re: Выражение "rowid" в подписях

Сообщение SergS » 22 июн 2011, 15:35

мда..., глюк подтверждаю, так же как и невозможность создания вычиляемой колонки на основе RowId в sql-запросе - она зараза все равно скрытой становится и значение ее при использовании в окне карты невозможно (по крайней мере, не получилось).
Однако. Если операция используется часто, то имеет смысл ее автоматизировать (в смысле заполнения предопределенного поля выборки значениями RowId, добавления выборки в карту и вклячения подписей из этого слоя). Это, кстати, возможно и в рабочем наборе. на самом деле если таблица уже открыта, то ее не имеет смысла открывать - можно исключить из текста команду open - стереть просто.
типа такого:
(в предположении, что в базовой таблице есть поле "Номер", и таблица доступна для редактирования и активным является окно карты и, в конце концов, есть эта самая выборка)

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

!Workspace
!Version 700
!Charset WindowsCyrillic
' Version подойдет любая из существующих, лишь бы не больше текущей версии работающей MI

dim Выборка as string
Выборка = selectioninfo(2)
update Выборка set Номер = rowid
add map window frontwindow() layer Выборка
set map window frontwindow() layer  Выборка label with Номер  Visibility On Overlap On Duplicates On Auto On
undim Выборка 
этот код сохранить в текстовом файле с расширением wor и пользоваться им как рабочим набором (выполнив предварительно вышеприведенные условия)
опять таки, по-моему проще этот код откомпилировать в Mapbasice, добавив обработку ошибок и посадив на кнопку, уж больно геморно запускать рабочий набор при частой необходимости.

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Выражение "rowid" в подписях

Сообщение ginpetr » 22 июн 2011, 20:29

Блин, а я надеялся, что просто сделал что-то не так...
Как раз хотел избежать рутинных операций. Лучший вариант был бы с SQL запросом...
Попробую развить Вашу идею, спасибо!

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Выражение "rowid" в подписях

Сообщение ginpetr » 06 фев 2013, 06:41

Наткнулся на свой вопрос. Если кому надо, rowid в подписях к выборке работает, если выборка - результат запроса к двум таблицам (н-р запрашиваются объекты лежащие в пределах какой-то территории, объекты в одной таблице, территория - в другой)

Ответить

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

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

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