RUS  ENG 

Перенос данных из другого слоя

Страницы: 1
RSS
Перенос данных из другого слоя
 
Имеются два слоя "Карта" и "Трасса"

Количество полей разное.
Необходимо перенести записи из Трассы в Карту


upd ate [карта] se t [Карта].[Адрес] = [Трасса].[Адрес] fr om [Трасса] wh ere (typeid = 3)

Подскажите, где-то я принципиально не понимаю использование данной команды. Тут в строке я только одно поле беру. А нужно где-то двадцать что в записи.
 
Цитата
написал:
Имеются два слоя "Карта" и "Трасса"

Количество полей разное.
Необходимо перенести записи из Трассы в Карту


upd ate [карта] se t [Карта].[Адрес] = [Трасса].[Адрес] fr om [Трасса] wh ere (typeid = 3)

Подскажите, где-то я принципиально не понимаю использование данной команды. Тут в строке я только одно поле беру. А нужно где-то двадцать что в записи.
Если нужно несколько полей, то указывайте несколько

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Вопрос в другом, где в запросе соответствие между объектом слоя [Карта] и объектом слоя [Трасса] ? С какого объекта одного слоя брать значения для объекта другого слоя? Должен быть какой-то общий признак или пространственное отношение.
 
В том и проблема. В слое "Карта" нет ещё таких полей. Нужно взять некоторые поля из слоя Трасса по признаку typeid=3 и создать новую запись в слое Карта.
 
Цитата
написал:
В том и проблема. В слое "Карта" нет ещё таких полей. Нужно взять некоторые поля из слоя Трасса по признаку typeid=3 и создать новую запись в слое Карта.
Вы путаете понятия.
У слоя нет полей, они есть у типов, при условии, что у них есть база данных.
Чтобы перенести данные из полей объектов одного слоя в объекты другого слоя, то вторым сначала надо создать нужные поля.
Как выше заметили, вам надо задать условия соответствия, например: перенеси адрес из объекта слоя 1 в объект слоя 2 ГДЕ поле test объекта слоя 1 равен полю test2 объекта слоя 2. Или же можно задать географическую привязку, например: где объект слоя 1 находиться в радиусе 20 см объекта в слое 2.

Ну или же можно пойти путем попроще, просто подвязать одну базу к другой по какому-то полю, но тут есть нюансы.
 
Цитата
Сергей Мечев написал:
У слоя нет полей, они есть у типов, при условии, что у них есть база данных.
Давайте всё-таки внесём ясность. Полей нет ни у слоя, ни у типа, ни у базы данных.
"Поле" - это колонка таблицы или "ответа", набора данных, полученных в результате запроса.
"Запись" - это строка таблицы или "ответа". В этом случае когда мы говорим "поле", мы подразумеваем конкретную ячейку этой записи.

Теперь:
Цитата
Виталий Токаренко написал:
В том и проблема. В слое "Карта" нет ещё таких полей. Нужно взять некоторые поля из слоя Трасса по признаку typeid=3 и создать новую запись в слое Карта.
Независимо от того, есть ли записи и нет в таблице для объектов слоя "Карта", как правильно писали Алексей и Сергей, для добавления или обновления данных нужно определить соответствие между данными таблиц. Поле связи с картой (обычно Sys) у них не совпадает. Либо делать пересечение по какому-то другому полю, определяющему это соответствие, либо через пространственное отношение между объектами двух слоёв.

Далее, оператор UPDATE, выполняемый для слоя, реализован так, что добавляет недостающие записи в нужные таблицы, подключенные к данному слою.
 
Полагаю из примера команды станет понятно что хочу сделать.

UPD ATE [карта]
SE T
[карта].typeid = [трасса].typeid,
[карта].modeid = [трасса].modeid,
[карта].typename = [трасса].typename,
[карта].modename = [трасса].modename,
[карта].length = [трасса].length,
[карта].perimeter = [трасса].perimeter,
[карта].area = [трасса].area,
[карта].text = [трасса].text,
[карта].linecolor = [трасса].linecolor,
[карта].fillcolor = [трасса].fillcolor,
[карта].patcolor = [трасса].patcolor,
[карта].linestyle = [трасса].linestyle,
[карта].fillstyle = [трасса].fillstyle,
[карта].linewidth = [трасса].linewidth,
[карта].[Адрес] = [трасса].[Адрес],
[карта].[Наименование] = [трасса].[Наименование узла],
[карта].[Номер источника] = [трасса].[Номер источника]
FR OM [трасса], [карта]
WH ERE
[трасса].typeid=3

Ответ: Modifying of spatial or graphical attributes is not implemented yet.
Изменено: Виталий Токаренко - 10.08.2022 12:46:18
 
Виталий,
Чтобы дальше двигаться, надо уточнить, что нужно сделать в слое "карта":
1. В слое "карта" уже есть объекты, но нет значений в нужных полях таблицы. Эти значения нужно взять от объектов другого слоя.
2. В слое "карта" нет объектов, он пуст и нужно скопировать объекты из другого слоя попутно разместив данные из исходной(ых) таблиц(ы) в нужных полях таблицы, подключенной к слою ?

По поводу запроса:
Запрос синтаксически правильный, но не верный по сути. Такие атрибуты как тип объекта (typename или typetid) не могут меняться с помощью запроса - это графические данные слоя, а менять можно только табличные данные (о чём выдается сообщение). А делать UPDATE таким параметрам как length, perimeter и area вообще бессмысленно. Как вы себе представляете назначить фигуре площадь ?
 
Я неверное себе представлял хранение данных в Зулу недостаточно изучив поля, и, полагая что все характеристики объекта заданы базой. И координаты всех точек. Понял, что перенос объектов со слоя на слой реализуется несколько иначе.

Задача же, в переносе объектов по признаку "typeid" =3 Т.е."Потребитель" со слоя "Трасса" на слой "Карта".
Изменено: Виталий Токаренко - 10.08.2022 14:42:05
 
Такая задача решается штатными инструментами:

1. Необходимо выделить объекты в группу, слоя Трасса с typeid 3: https://www.politerm.com/zuludoc/index.html#edit_group_select_attr.html

2. Перенести объекты из слои Трасса, в слой Карта: https://www.politerm.com/zuludoc/index.html#edit_group_write.html
Если перенести надо табличную информацию, надо проверить что бы совпадали структуры таблиц.
Страницы: 1