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

Знатокам 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""""", но результат тот же. Что я не так делаю....

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

Добавлено: 21 мар 2008, 20:25
KolesovDmitry
Владимир писал(а):Почему вот такая конструкция работает:
...

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

В первом примере выделяются объекты у которых поле Название не пустое. А во втором случае выделяются все объекты... хотя я хочу чтоб тоже не пустые выделялись..
Все молчат, тогда попробую ответить я. Точного ответа я не знаю, но мне не нравится, что вы обращаетесь к таблице через строковую переменную:
Владимир писал(а): 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 <> ""

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

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

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