Знатокам MapBasic. Помогите

MapInfo, MapBasic
Ответить
Владимир
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 мар 2008, 13:08
Репутация: 0
Откуда: Ханты-Мансийск

Знатокам MapBasic. Помогите

Сообщение Владимир » 21 мар 2008, 13:18

Почему вот такая конструкция работает:

Dim TableName, TableName_New, Statement as String
TableName="Гидрография"
TabName_New=TabName+"_POINT"
Select * from TabName Where Название Not Like "" into TabName_New

А вот такая конструкция не работает:

Dim TableName, TableName_New, Statement as String
TableName="Гидрография"
TabName_New=TabName+"_POINT"
Statement="Название"
Select * from TabName Where Statement Not Like "" into TabName_New

В первом примере выделяются объекты у которых поле Название не пустое. А во втором случае выделяются все объекты... хотя я хочу чтоб тоже не пустые выделялись..
Переменную Statement я делал = "Название Not Like""""", но результат тот же. Что я не так делаю....

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Знатокам MapBasic. Помогите

Сообщение KolesovDmitry » 21 мар 2008, 20:25

Владимир писал(а):Почему вот такая конструкция работает:
...

А вот такая конструкция не работает:
...

В первом примере выделяются объекты у которых поле Название не пустое. А во втором случае выделяются все объекты... хотя я хочу чтоб тоже не пустые выделялись..
Все молчат, тогда попробую ответить я. Точного ответа я не знаю, но мне не нравится, что вы обращаетесь к таблице через строковую переменную:
Владимир писал(а): Dim Statement as String
Statement="Название"
Select * from TabName Where Statement Not Like "" into TabName_New
для таких целей в MapBasic есть специальный тип данных - Alias (у меня нет под рукой MapBasic'а, поэтому за подробностями отсылаю в справку). Мне кажется, что такой код должен был бы сработать:
Dim Statement as Alias
Statement="Название"
Select * from TabName Where Statement Not Like "" into TabName_New
Попробуйте.

PS а почему используете like? Ведь для ваших целей (отфильтровать пустые записи) достаточно: Statement <> ""

Владимир
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 мар 2008, 13:08
Репутация: 0
Откуда: Ханты-Мансийск

Сообщение Владимир » 22 мар 2008, 08:15

Спасибо за ответ..
Конструкция <>"" не работает, пробовал...
<> работает в коде МапВасика, но не в SQL-запросе...

BrainDrain
Интересующийся
Сообщения: 18
Зарегистрирован: 15 сен 2005, 10:57
Репутация: 0

Сообщение BrainDrain » 24 мар 2008, 01:15

МapBasic - это интерпретатор, в котором sql-подобный синтаксис, скажем так, подразумевает раннее связывание, поэтому чтобы сделать позднее, как в вашем случае, нужно срздавать строку команды (select/intersect .. etc.) а потом использовать оператор Run Command <Текс_команды>. Это пригождается, когда динамически получаешь имена таблиц/колонок и т.п. параметры команд MapBasic.

Владимир
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 мар 2008, 13:08
Репутация: 0
Откуда: Ханты-Мансийск

Сообщение Владимир » 24 мар 2008, 07:07

Всем спасибо, с установкой переменной в тип Alias все заработало как надо :D

Ответить

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

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

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