| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Баландин Денис
 
  
  Зарегистрирован: 15.08.2006 Сообщения: 44 Откуда: Екатеринбург
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 10:37    Заголовок сообщения: Быстрая очистка слоя | 
				     | 
			 
			
				
  | 
			 
			
				Добрый день, помогите...
 
хотел программно реализовать очистку слоев, но перебор и удаление объектов происходит уж больно медленно, в то время как из проводника БД, очистка слоев работает быстро...
 
код следующий:
 
 	  | Код: | 	 		  
 
function TIngeoMapService.DeleteObjByLayer(aLayerID: WideString): Integer;
 
var
 
  aCounter: Integer;
 
  aMapObjects: IIngeoMapObjects;
 
  aMapObjectsQuery: IIngeoMapObjectsQuery;
 
  anObjectID: WideString;
 
  aShapeIndex: Integer;
 
begin
 
  aMapObjects:=IngeoApp.ActiveDb.MapObjects;
 
  aMapObjectsQuery:=aMapObjects.QueryByLayers(aLayerID);
 
  aCounter:=0;
 
  while Not aMapObjectsQuery.EOF do begin
 
    aMapObjectsQuery.Fetch(aLayerID, anObjectID, aShapeIndex);
 
    aMapObjects.DeleteObject(anObjectID);
 
    inc(aCounter);
 
  end;
 
  aMapObjects.UpdateChanges;
 
  result:=aCounter;
 
end;
 
 | 	 
  | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		andreichernov
 
 
  Зарегистрирован: 14.02.2005 Сообщения: 209 Откуда: Самара
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 11:13    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Раньше в проводнике тоже долго работало.
 
Рустам говорил, что из-за топосвязей.
 
Потом очистку слоя они как-то оптимизировали, но, видимо, используются внутренние функции Ингео.
 
 
Попробуйте, насколько  ускоряется процесс, если у слоя убрать топосвязи со всеми другими слоями.
 
Если дело в этом, то можно попытаться запомнить вид топосвязей, а после удаления всех объектов слоя их восстанавливать. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Баландин Денис
 
  
  Зарегистрирован: 15.08.2006 Сообщения: 44 Откуда: Екатеринбург
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 11:50    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Топосвязей нет, объекты тоже простые, из одной формы, одного контура | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		andreichernov
 
 
  Зарегистрирован: 14.02.2005 Сообщения: 209 Откуда: Самара
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 12:09    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Уточните - топосвязей нет у объектов или у слоя не стоит никаких отношений с другими слоями.
 
Если у слоя все-таки выставлены какие-то, то все равно по каждому объекту будут искаться топосвязи в таблице ingeo_links (хоть их и нету)
 
На это уходит много времени. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Баландин Денис
 
  
  Зарегистрирован: 15.08.2006 Сообщения: 44 Откуда: Екатеринбург
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 15:11    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Топосвязей нет у слоя вообще, хотя надо будет сравнить как они повлияют на вышеприведенный код | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Алексей В. Бастриков
 
 
  Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
  | 
		
			
				 Добавлено: Ср 23 Сен 2009 16:59    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Думается мне, что задачу можно решить SQL-запросом к БД ИнГЕО на удаление данных, учесть при этом все таблицы, связанные с INGEO_LAYERS.    | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		BarakudaX777
 
  
  Зарегистрирован: 07.07.2014 Сообщения: 26 Откуда: ООО "ГЕОГРАД" г. Орск
  | 
		
			
				 Добавлено: Пн 01 Сен 2014 17:17    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Вопрос так и не решен? Кто чего добился? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |