Выбор записей таблицы по тексту надписи Mapbasic

MapInfo, MapBasic
Ответить
gg_man
Новоприбывший
Сообщения: 5
Зарегистрирован: 28 июл 2023, 14:08
Репутация: 0
Откуда: Tyumen

Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gg_man » 28 июл 2023, 14:14

Здравствуйте.
Товарищи, помогите, пожалуйста, составить запрос для выборки текстовых объектов из таблице с определённым текстом надписи. Что-то на подобие этого
Select * from zz Where ObjectInfo(Obj,OBJ_INFO_TEXTSTRING) = "вода" Into Temp1.

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1053
Ваше звание: программист
Откуда: Казань

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gamm » 28 июл 2023, 16:58

если не работает, добавьте ObjectInfo(obj, OBJ_INFO_TYPE) = OBJ_TYPE_TEXT, численные значени кодов в справочнике Мапвасика

gg_man
Новоприбывший
Сообщения: 5
Зарегистрирован: 28 июл 2023, 14:08
Репутация: 0
Откуда: Tyumen

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gg_man » 31 июл 2023, 07:34

Да, по сути этот запрос с двумя условиями и выборка текстовых объектов отрабатывает, а вот вторая часть, нет.
SELECT * FROM zz WHERE int(objectinfo(obj,1))=10 and ObjectInfo(Obj,OBJ_INFO_TEXTSTRING) = "вода" Into Temp1
С численным значением также ошибка о "Несовпадение типов данных в выражение"
SELECT * FROM zz WHERE int(objectinfo(obj,1))=10 and ObjectInfo(Obj,3) = "вода" Into Temp1

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1053
Ваше звание: программист
Откуда: Казань

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gamm » 31 июл 2023, 10:32

пример в формате MIF/MID выложите. А для начала уберите лишние преобразования, и скобок добавьте, я не помню, какие у Мапинфы приоритеты операций
SELECT * FROM zz WHERE (objectinfo(obj,1)=10) and (ObjectInfo(Obj,3) = "вода") Into Temp1

gg_man
Новоприбывший
Сообщения: 5
Зарегистрирован: 28 июл 2023, 14:08
Репутация: 0
Откуда: Tyumen

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gg_man » 01 авг 2023, 09:26

Дело в том, что без преобразования не отрабатывает и первая часть запроса objectinfo(obj,1)=10, выдавая туже ошибку "Несовпадение типов данных в выражение". А при добавление функции (Int() - Возвращает целую часть действительного числа) отрабатывает корректно Int(objectinfo(obj,1))=10. Тут мне логика мапа не ясна, но просто высмотрел этот приём в интернете. Скобки даже не знаю какие добавит в условие, главное функции в скобках, а сами условия мап отрабатывает по порядку в запросе.
Вложения
Гидрография.rar
(8.63 КБ) 210 скачиваний

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1053
Ваше звание: программист
Откуда: Казань

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gamm » 01 авг 2023, 12:19

проблема понятная, если коротко - то косяк разработчиков Мапинфы, придется делать в два запроса, обойти не порлучится в силу отсутствия ID, и ограничений на длину запроса. Запросы нужно сохранить в текстовые файлы (первый до разделителя, второй после), они грузятся в форму SQL (единственно, могут быть проблемы с русской кодировкой, нужно привести в ту, которая в конкретной Мапинфе)

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

Fields {ID, Тип, Название, Примечание, R_N, int(objectinfo(obj,1)) "xxx",str$(ObjectInfo(Obj,3)) "zzz"}
Tables {Гидрография}
Where {int(objectinfo(obj,1))=10}
Group {}
Order {}
Into {temp1}
Browse
-------------------------------------------------------------------------------------------
Fields {ID, Тип, Название, Примечание, R_N}
Tables {temp1}
Where {zzz="вода"}
Group {}
Order {}
Into {temp2}
Browse


gg_man
Новоприбывший
Сообщения: 5
Зарегистрирован: 28 июл 2023, 14:08
Репутация: 0
Откуда: Tyumen

Re: Выбор записей таблицы по тексту надписи Mapbasic

Сообщение gg_man » 02 авг 2023, 07:12

Всё отработало, как надо. Спасибо большое за помощь!

Ответить

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

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

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