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

MapInfo. Помогите с выборкой чайнику

Добавлено: 06 апр 2014, 17:21
Dartix
Написал код процедуры выборки с объединением из 2х таблиц
Не могу понять что неправильно в процедуре
Sub proc
dim aaaa as string
dim bbbb as string
aaaa = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1"))
bbbb = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 2'"))
Select aaaa.col1, aaaa.col2, bbbb.col1, bbbb.col2 from aaaa, bbbb where aaaa.col3 = bbbb.col3 into qq
End Sub
В ошибке пишет
Found [.] while searching for [A string constant]
Found [end] while searching for [from]

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 07 апр 2014, 07:31
juffin_h
Для aaaa типа String выражение aaaa.col1 не допустимо.
Чтобы обратится к колонке, надо использовать тип Alias.
Кроме того здесь: aaaa = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1")), Вы получаете имя таблицы, но таблицу не открываете.

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 07 апр 2014, 10:03
Dartix
Сделал так
Sub proc
dim aaaa as alias
dim bbbb as alias
aaaa = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1"))
bbbb = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 2'"))
Select aaaa.col1, aaaa.col2, bbbb.col1, bbbb.col2 from aaaa, bbbb where aaaa.col3 = bbbb.col3 into qq
End Sub
Ничего не поменялось, такая же ошибка

Кроме того здесь: aaaa = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1")), Вы получаете имя таблицы, но таблицу не открываете.
Да подразумевается, что таблица уже открыта. Просто не знаю как сделать так, чтобы таблица ещё и открывалась при выполнении процедуры, если он закрыта. Если не затруднит, не могли бы рассказать.

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 07 апр 2014, 10:37
Sibit

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

Sub proc
dim a1 as string
dim b1 as string

a1 = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1"))
b1 = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 2'"))

' Не забудем открыть таблицы! ;)

select * from a1 into aaaa
select * from b1 into bbbb
Select aaaa.col1, aaaa.col2, bbbb.col1, bbbb.col2 from aaaa, bbbb where aaaa.col3 = bbbb.col3 into qq
End Sub
Ну и алиас вы неправильно используете

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 07 апр 2014, 10:57
juffin_h
На будущее.
Alias должен содержать ссылку на колонку, а не таблицу.

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

...
dim a1, a2 as alias
dim aaaa as string

aaaa = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1"))
a1 = aaaa + "COL1"
a2 = aaaa + "COL2"
...
Еще временное имя таблицы можно задать при открытии.

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

...
a1 = PathToTableName$(FileOpenDlg("","","TAB","Выберите таблицу 1"))
Open Table a1 As aaaa
...

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 07 апр 2014, 15:48
Dartix
А как использовать оператор "<>" вместо "=" в выделенном жирным месте?
Select aaaa.col1, aaaa.col2 from aaaa, bbbb where aaaa.col3 = bbbb.col3 into qq
либо обратить выборку в таблице аааа и вывести на экран получившуюся

Re: MapInfo. Помогите с выборкой чайнику

Добавлено: 08 апр 2014, 04:34
Sibit
Dartix писал(а):А как использовать оператор "<>" вместо "=" в выделенном жирным месте?

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

select * from aaaa where col3 <> all(select col3 from bbbb) into qq
или в меню выбрать - "Обратить выборку"

PS А еще лучше прочитать руководство по MapBasic, там все довольно подробно описано.