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

Можно ли обновить геометрию...

Добавлено: 14 июн 2018, 21:15
Boris
Столкнулся с задачей, когда есть таблица, в которой много разных атрибутов и есть геометрия, к ней присылается/получается таблица с откорректированной геометрией и минимумом данных. Надо заменить геометрию в первой таблице на геометрию из второй.
Ключевое поле в обеих таблицах для связи имеется. Но стандартные функции ведь не дают обновлять колонку "obj" ?
Как в много ходов я знаю:
  • создать запрос на связку двух таблиц по ключевому полю. Таблицу с геометрией указать первой, а выборку указать только колонки из второй таблицы. Тогда в запрос попадет геометрия от 1-ой, а атрибутика от второй;
  • сохранить запрос как постоянную таблицу;
  • запрос закрыть, таблицу открыть
  • выполнить запрос еще раз, переставив местами таблицы в запросе - тогда выделение записей произойдет в обновляемой таблице
  • из запроса удалить все записи
  • ранее созданную таблицу добавить к обновляемой таблице
Но может есть способ по короче? Атрибутивные поля то обновляются за одну команду.

Re: Можно ли обновить геометрию...

Добавлено: 14 июн 2018, 21:52
trir
1. Создать БД
2. Написать функцию обновления таблицы
3. Выполнить функцию

Re: Можно ли обновить геометрию...

Добавлено: 14 июн 2018, 22:17
Boris
trir писал(а):
14 июн 2018, 21:52
1. Создать БД
Какую посоветуете, что быстро, не накладно и без проблем соединилась с мапинфо?

Re: Можно ли обновить геометрию...

Добавлено: 14 июн 2018, 22:40
trir
MS SQL Server, только лучше посмотреть совместимость версий

Re: Можно ли обновить геометрию...

Добавлено: 15 июн 2018, 06:21
MI user
Boris писал(а):
14 июн 2018, 21:15
Ключевое поле в обеих таблицах для связи имеется. Но стандартные функции ведь не дают обновлять колонку "obj" ?
Есть оператор UPDATE.
Я бы сделал как-то так (очень примерно):

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

DIM a as alias
DIM o_good as object
DIM id_good as integer

' Цикл по правильной таблице
  Fetch First From MyTableWithGoodObject
  Do While Not EOT(MyTableWithGoodObject)
	' Получим объект из правильной таблицы
	a = "MyTableWithGoodObject".obj
	o_good = a

	' Получим ID из правильной таблицы
	a = "MyTableWithGoodObject".ID
	id_good = a

	' Заменим геометрию для текущего ID
	UPDATE MyTableWithBadObject
		SET Obj = o_good
		WHERE ID = id_good
	
    Fetch Next From MyTableWithGoodObject
  Loop