Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
b0br0ff
Зарегистрирован: 22.05.2009 Сообщения: 22
|
Добавлено: Ср Сен 16, 2009 9:46 am Заголовок сообщения: Проблема с Add Column |
|
|
Мне нужно обновить колонку в таблице данными из другой таблицы, команда Update в Мапифо какая-то урезанная о посредством SQL это сделать не представляется возможным. В хэлпе нашел Add Column, который якобы это должен делать
Add Column
CELLS_3G(latitude)
From COORDS_3G
Set to latitude
Where cellid=cellid
однако же программа вылетает с ошибкой Stack Overflow, не оскажете в чём проблема или как можно подругому решить эту задачу. Заранее благодарен! |
|
Вернуться к началу |
|
|
Alex_47
Зарегистрирован: 01.07.2009 Сообщения: 66 Откуда: Н.Новгород
|
Добавлено: Ср Сен 16, 2009 6:46 pm Заголовок сообщения: |
|
|
A если тупо перебрать обе таблицы - выбрать 1-ю строку 1 таблицы извлечь значение из нужной колонки затем выбрать 1-ю строку 2 таблицы и обновить выборку.
ну примерно так:
dim q as string
dim i as integer
i=1
Fetch First From name_table1
Do while Not EOT (name_table1)
q=name_table1.col1
select * from name_table2 where rowid=i into Selection2
Update Selection2 Set col1 = q
Fetch Next From name_table1
i=i+1
Loop |
|
Вернуться к началу |
|
|
spawner
Зарегистрирован: 01.04.2009 Сообщения: 77
|
Добавлено: Чт Сен 17, 2009 6:35 am Заголовок сообщения: |
|
|
хм, update вроде нормально работает на обновление колонки.
1)делаем sql запрос, объединяем 2 таблицы по полю(нескольким), получаем результирующую таблицу QueryX
2)делаем Update нужной колонки QueryX
единственно, если названия колонок в обоих объединяемых таблицах одинаковые, то глючить может Update. Тогда нужно временно одну колонку переименовать. |
|
Вернуться к началу |
|
|
Alex_47
Зарегистрирован: 01.07.2009 Сообщения: 66 Откуда: Н.Новгород
|
Добавлено: Чт Сен 17, 2009 6:20 pm Заголовок сообщения: |
|
|
a если писать не имя колонки(пример:поле_1,поле_2), а номер колонки(пример:col1,col2) |
|
Вернуться к началу |
|
|
spawner
Зарегистрирован: 01.04.2009 Сообщения: 77
|
Добавлено: Вт Сен 22, 2009 9:54 pm Заголовок сообщения: |
|
|
если использовать апдейт который из меню (обновить колонку) то там поле выбирается из списка, и одинаковые поля глючат, а кол1, кол2 не сделать |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Вт Сен 29, 2009 10:31 am Заголовок сообщения: |
|
|
а если использовать не меню мапинфо, а команды мапбейсика, то ColN сделать можно.
и если объединить два действия, sql-запрос и обновление колонки, то реализуется это одной командой
Add Column
...
Where Col1=Col1
(где Col1 и Col1 - колонки из двух таблиц, которые используются для объединения) |
|
Вернуться к началу |
|
|
XELLGIS
Зарегистрирован: 03.09.2009 Сообщения: 16 Откуда: Краснодар
|
Добавлено: Вт Сен 29, 2009 11:15 am Заголовок сообщения: |
|
|
Здраствуйте, у меня схожая проблема.
Создал запрос на добавление в таблицу колонки где в каждой строчке будет тестовая расшифровка идентификатора объектов таблицы.
ADD COLUMN VEGPOLРастительность_полl (Name)
FROM Table_klass2
SET TO B
WHERE Class_id = A
Где VEGPOLРастительность_полl - имя таблицы с объектами, которая будет обновляться. А Name имя колонки с расшифровкой. Table_klass2 таблица содержащая все коды идентификаторов (колонка А) и соответствующие им расшифровки (колонка B).
Во время выполнения сначала пишет что не возможно создать временную колонку Name, а при последующих попытках пишет что выполнение данной операции с колонкой Name не возможно... хотя самой колонки в таблице нет.
Может я вообще иду не по правильному пути? ) |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Вт Сен 29, 2009 12:01 pm Заголовок сообщения: |
|
|
потому и ругается, что нет такой колонки.
чтоб создалась временная колонка, укажите в скобках не просто ее имя, а еще и тип, например (Name Char (150))
но временные колонки не сохраняются в таблицах, разве что копию полученной временной таблицы сохранять.
так что лучше сначала колонку добавить в таблицу
Alter Table ваша_таблица ( add Name Char(150) )
а следующим действием уже обновить значениями из классификатора. |
|
Вернуться к началу |
|
|
XELLGIS
Зарегистрирован: 03.09.2009 Сообщения: 16 Откуда: Краснодар
|
Добавлено: Вт Сен 29, 2009 12:36 pm Заголовок сообщения: |
|
|
reasonat писал(а): |
потому и ругается, что нет такой колонки.
чтоб создалась временная колонка, укажите в скобках не просто ее имя, а еще и тип, например (Name Char (150))
но временные колонки не сохраняются в таблицах, разве что копию полученной временной таблицы сохранять.
так что лучше сначала колонку добавить в таблицу
Alter Table ваша_таблица ( add Name Char(150) )
а следующим действием уже обновить значениями из классификатора. |
Спасибо, после добавления этой строчки все прошло как по маслу.
итог:
Alter Table VEGPOLРастительность_полl ( add Name Char(150) )
ADD COLUMN VEGPOLРастительность_полl (Name)
FROM Table_klass2
SET TO B
WHERE Class_id = A
Осталось добавить части кода для каждой таблицы шаблона, но это уже механическое действие будет. |
|
Вернуться к началу |
|
|
Alex_47
Зарегистрирован: 01.07.2009 Сообщения: 66 Откуда: Н.Новгород
|
Добавлено: Ср Окт 07, 2009 4:10 pm Заголовок сообщения: |
|
|
spawner писал(а): |
если использовать апдейт который из меню (обновить колонку) то там поле выбирается из списка, и одинаковые поля глючат, а кол1, кол2 не сделать |
Никогда не писал имя колонок. Все время там писал например надо добавить впереди первой колонки «н» писал «н»+col1 и все работает. |
|
Вернуться к началу |
|
|
spawner
Зарегистрирован: 01.04.2009 Сообщения: 77
|
Добавлено: Чт Окт 08, 2009 11:38 am Заголовок сообщения: |
|
|
н+col1 работает, т.к. это выражение и оно интерпретируется мапбэйсиком.
А вот _выбор поля для обновления_ производится из _списка_ т.е. если 2 поля имеют одинаковые имена, то будет обновлено первое. |
|
Вернуться к началу |
|
|
|