Временная колонка с выражением на MapBasic
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Временная колонка с выражением на MapBasic
Подскажите как создать временную колонку с выражением в среде программы MapBasic?
Имеется таблица с колонками a и b (в таблице кроме этих колонок может быть дополнительно любое число колонок) к которой нужно добавить временную колонку с выражением a+"x"+b+"y"
Имеется таблица с колонками a и b (в таблице кроме этих колонок может быть дополнительно любое число колонок) к которой нужно добавить временную колонку с выражением a+"x"+b+"y"
- ginpetr
- Завсегдатай
- Сообщения: 374
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 139
- Откуда: Орск
- Контактная информация:
Re: Временная колонка с выражением на MapBasic
Что-то мне подсказывает, что то, что Вы хотите сделать, можно сделать по-другому. Для чего Вам такая временная колонка?
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Временная колонка с выражением на MapBasic
Есть 2 таблицы tabl1 и tabl2:
1. с колонками a1 и b1
2. с колонками a2 и b2
мне нужно сравнить данные этих таблиц используя поля a и b как ключевые.
Сначала пользовался условием объединения
where a1+"x"+b1+"y" = all(select a2+"x"+b2+"y" from tabl2),
но код программы довольно большой и используя каждый раз данный способ объединения выполнение программы происходит медленно
1. с колонками a1 и b1
2. с колонками a2 и b2
мне нужно сравнить данные этих таблиц используя поля a и b как ключевые.
Сначала пользовался условием объединения
where a1+"x"+b1+"y" = all(select a2+"x"+b2+"y" from tabl2),
но код программы довольно большой и используя каждый раз данный способ объединения выполнение программы происходит медленно
- ginpetr
- Завсегдатай
- Сообщения: 374
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 139
- Откуда: Орск
- Контактная информация:
Re: Временная колонка с выражением на MapBasic
Дубли ищите? Это, наверное, в любом случае процесс долгий...
Мапинфо почему-то не любит добавлять динамические колонки к таблице, рассчитанные из её же колонок.
Хотите сделать колонки с неким подобием уникальных индексов и по ним сравнивать записи?
Мапинфо почему-то не любит добавлять динамические колонки к таблице, рассчитанные из её же колонок.
Хотите сделать колонки с неким подобием уникальных индексов и по ним сравнивать записи?
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Временная колонка с выражением на MapBasic
Дубли и не только. Программа сравнивает многие значения 2х таблиц. Нужна именно временная колонка с уникальными индексами. Дело в том, что в среде МапИнфо такую колонку можно добавить к таблице: в списке таблицы с помощью кнопки "отобрать поля". Но вот как это сделать в среде МапБесик так и не нашел(
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
- ginpetr
- Завсегдатай
- Сообщения: 374
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 139
- Откуда: Орск
- Контактная информация:
Re: Временная колонка с выражением на MapBasic
Add column должна это делать, но не всегда хочет. А если и получается, то не всегда динамически.
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Временная колонка с выражением на MapBasic
Пробовал
Add column tabl1 (key_col) from tabl1 set to a1+"x"+b1+"y"
Добавляется временная колонка key_col, но в ней только значения колонки a1
Add column tabl1 (key_col) from tabl1 set to a1+"x"+b1+"y"
Добавляется временная колонка key_col, но в ней только значения колонки a1
-
- Гуру
- Сообщения: 4044
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1049
- Ваше звание: программист
- Откуда: Казань
Re: Временная колонка с выражением на MapBasic
поскольку SQL в Мапинфе убогий, вывалите все в Access (или в любую другую СУБД), там все спокойно сделайте, и закачайте результат обратно. Будет быстрее, особенно если таблицы большие.
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Временная колонка с выражением на MapBasic
Попробуйте так:
select * From tstCol01 into ss
Add Column tstCol01(key1) From ss Set to ss.a+ss.b+10 Where a=a Dynamic
Впрочем, так тоже будет работать
Add Column tstCol01(key2) From tstCol01 Set to tstCol01.a+tstCol01.b+10 Where a=a Dynamic
select * From tstCol01 into ss
Add Column tstCol01(key1) From ss Set to ss.a+ss.b+10 Where a=a Dynamic
Впрочем, так тоже будет работать
Add Column tstCol01(key2) From tstCol01 Set to tstCol01.a+tstCol01.b+10 Where a=a Dynamic
- Вложения
-
- Результат
- miHG370.png (13.84 КБ) 8966 просмотров
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Временная колонка с выражением на MapBasic
Тогда проще было бы добавить не временную колонку и потом её удалить, но этот вариант не подходит, потому что таблица может содержать не сохранённые изменения, а операция со структурой может совершаться только с сохранённой таблицей.gamm писал(а):поскольку SQL в Мапинфе убогий, вывалите все в Access (или в любую другую СУБД), там все спокойно сделайте, и закачайте результат обратно. Будет быстрее, особенно если таблицы большие.
Необходимо работа именно с исходной таблицей (не с копиями).
В таком случае значения в колонке key1 не во всех случаях будут уникальными:thegeo писал(а):Попробуйте так:
select * From tstCol01 into ss
Add Column tstCol01(key1) From ss Set to ss.a+ss.b+10 Where a=a Dynamic
Впрочем, так тоже будет работать
Add Column tstCol01(key2) From tstCol01 Set to tstCol01.a+tstCol01.b+10 Where a=a Dynamic
a______b______key1
14____17______41
17____14______41
Неужели нельзя в среде MapBasic выполнить операцию, выполняемую функцией "Отобрать поля" MapInfo?
- Вложения
-
- Отобрать поля.jpg (166.91 КБ) 8945 просмотров
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Временная колонка с выражением на MapBasic
Вопрос уникальности это ваш выбор. Выражение (tstCol01.a+tstCol01.b+10) я вставил лишь для примера. Не понял в чем отличие от результата даваемого функцией "Отобрать поля".
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Временная колонка с выражением на MapBasic
Виноват, но полагал что это тривиальное преобразование. Вот точно под ваши требования.
Add Column tstCol01(key2 char(15)) From tstCol01 Set to tstCol01.a & "x" & tstCol01.b & "y" Where a=a Dynamic
Add Column tstCol01(key2 char(15)) From tstCol01 Set to tstCol01.a & "x" & tstCol01.b & "y" Where a=a Dynamic
- ginpetr
- Завсегдатай
- Сообщения: 374
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 139
- Откуда: Орск
- Контактная информация:
Re: Временная колонка с выражением на MapBasic
А то же самое с условием объединения по rowid работает? Просто значения a могут повторяться...thegeo писал(а):Виноват, но полагал что это тривиальное преобразование. Вот точно под ваши требования.
Add Column tstCol01(key2 char(15)) From tstCol01 Set to tstCol01.a & "x" & tstCol01.b & "y" Where a=a Dynamic
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Временная колонка с выражением на MapBasic
Не думаю, т.к. условие становится достаточно бессмысленным. Но ничто не мешает добавить колонку и заполнить ее RowId (и при необходимости ее можно обновлять).
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Временная колонка с выражением на MapBasic
Без внятного описания задачи, все сказанное выше и ниже - это сплошная игра в угадайку. Для нормальных операций над таблицами, как сказано тут:
В Mapinfo для этого УЖЕ есть стандартное решение, при котором данные хранятся в родной таблице Mapinfo, построенной не на DBF-е, а на Access'е (см. команду "сохранить как..."), после чего можно использовать всю мощь Access. Еще 15 лет назад до эпохи дешевых SQL серверов на этой возможностии было сделано море различных тяжелых задач, которые потом ушли в ГИС серверные приложения, а тут всего на всего две таблицы объединить каким то замысловатым образом.
К тому же в таблицах на основе Access RowID доступен в поле таблицы и не меняется без специальных действий.
правильно использовать НОРМАЛЬНУЮ реализацию SQL, если задача сводится к запросу или их последовательности.gamm писал(а):поскольку SQL в Мапинфе убогий, вывалите все в Access (или в любую другую СУБД), там все спокойно сделайте, и закачайте результат обратно. Будет быстрее, особенно если таблицы большие.
В Mapinfo для этого УЖЕ есть стандартное решение, при котором данные хранятся в родной таблице Mapinfo, построенной не на DBF-е, а на Access'е (см. команду "сохранить как..."), после чего можно использовать всю мощь Access. Еще 15 лет назад до эпохи дешевых SQL серверов на этой возможностии было сделано море различных тяжелых задач, которые потом ушли в ГИС серверные приложения, а тут всего на всего две таблицы объединить каким то замысловатым образом.
К тому же в таблицах на основе Access RowID доступен в поле таблицы и не меняется без специальных действий.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя