| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Чт 03 Янв 2013 18:27    Заголовок сообщения: Вложенные справочники | 
				     | 
			 
			
				
  | 
			 
			
				Добрый день.
 
 
Подскажите, пожалуйста, возможно ли в Ингео реализовать вложенность справочников? Ситуация примерно такая, есть реестр улиц, и справочник с районами. Улица может проходит сразу через несколько районов. Сделали справочник улицы с полями:  код улицы, название улицы и три поля под коды районов. Хотелось бы, чтобы, вместо кода района подставлялось его имя. Похожая проблема есть со справочником "Владельцы",  в поле адрес находится код улицы, а хотелось бы, чтобы подставлялось название улицы.
 
 
Версия ингео 4.4.0.226
 
 
Заранее спасибо за ответ. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Вт 15 Янв 2013 18:21    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				В самой Ингео такая возможность отсутствует, для реализации ее вам нужно написать собственный модуль-расширение. _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Вт 15 Янв 2013 19:09    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Спасибо за ответ. Как раз занимаемся реализацией данного модуля-расширения. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Ср 06 Фев 2013 04:52    Заголовок сообщения: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				Добрый день.
 
 
После реализации модуля возникла необходимость редактирования улиц несколькими пользователями. При этом необходимо каким-то образом накладывать блокировку на редактируемую конкретным пользователем улицу. 
 
 
Решили реализовать данную задачу средствами MS SQL 2008 Standart.
 
 
Для этого до создания формы редактирования делается запрос:
 
 
 	  | Код: | 	 		  
 
 
 try
 
 
    AIngeo.ActiveDb.SemDbTables.ExecSQL('set lock_timeout 0 BEGIN TRANSACTION SELECT [ID] FROM [streetsname] WITH (updlock) WHERE [ID]=' + InttoStr((ListBox1.Items.Objects[ListBox1.ItemIndex] as TStSynonymData).Code),null,null);
 
        
 
  except
 
 
    ShowMessage('Улица редактируется другим пользователем.');
 
    exit
 
 
  end;
 
 
...
 
 
try
 
 
    StreetsEditForm.ShowModal
 
 
  finally
 
 
    AIngeo.ActiveDb.SemDbTables.ExecSQL('COMMIT',null,null);
 
    StreetsEditForm.Free
 
 
  end;
 
 
 | 	  
 
 
Еще есть форма редактирования объектов, которая существует в одном экземпляре, но отображается не модально, при выборе одного объекта начинается транзакция с блокирующим выбором строки из семантической таблицы и при потере выделения транзакция завершается. 
 
 
Подскажите, пожалуйста, есть ли у ингео свои транзакции ? есть ли вероятность данными запросами нарушить работу ингео? Есть ли в ингео API другой способ блокировки строк? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Михаил Власов
 
  
  Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
  | 
		
			
				 Добавлено: Ср 06 Фев 2013 15:04    Заголовок сообщения: Re: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Максим Орлов писал(а): | 	 		  AIngeo.ActiveDb.SemDbTables.ExecSQL('set lock_timeout 0 BEGIN TRANSACTION SELECT [ID] FROM [streetsname] WITH (updlock) WHERE [ID]=' + InttoStr((ListBox1.Items.Objects[ListBox1.ItemIndex] as TStSynonymData).Code),null,null);
 
 | 	  
 
В ИнГео 4.6 возможности ExecSql будут ограничены.
 
Указанный запрос приведет к ошибке.
 
Не используйте возможности SQL, специфичные для определенной СУБД.
 
 
Вы можете завести таблицу с блокировками и в нее помещать ключи блокируемых записей.
 
 
Вместо ExecSQL используйте SemDbTable.SelectData, InsertData и пр. _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Ср 06 Фев 2013 17:03    Заголовок сообщения: ExecSQL | 
				     | 
			 
			
				
  | 
			 
			
				Добрый день
 
 
В случае отдельной таблицы для блокировок, существует возможность, когда два пользователя одновременно проверять блокировку и потом потом одновременно установят и редактировать будут один и тот же объект одновременно. 
 
Хотя если сделать поле первичным ключом, и вставлять записи вида ТИПОБЪЕКТА_ИДЕНТИФИКАТОР, то может сработать.
 
 
Еще вопрос, каким образом можно делать left join без execSQL? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Михаил Власов
 
  
  Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 09:38    Заголовок сообщения: Re: ExecSQL | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Максим Орлов писал(а): | 	 		  | Еще вопрос, каким образом можно делать left join без execSQL? | 	  
 
Никаким.
 
 
А зачем вам JOIN? _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 12:43    Заголовок сообщения: Join | 
				     | 
			 
			
				
  | 
			 
			
				| Есть таблица с семантическими данными объектов нанесенных на карту, в ней есть поле владелец, которое в свою очередь подставляется из справочника владельцы. Есть модуль поиска, в котором необходимо делать поиск одновременно по полям владельца и по полям объекта. Для этой цели делается left join и потом отбор по критериям в части запроса where. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 13:01    Заголовок сообщения: Re: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Михаил Власов писал(а): | 	 		  | В ИнГео 4.6 возможности ExecSql будут ограничены. | 	  
 
Здравствуйте, Михаил! Надеюсь возможности ExecSQL не будут "порезаны" критически и вы предупредите о накладываемых ограничениях.
 
Ибо многие модули так или иначе используют эту функцию.
 
Т.к. другой простой и "законный" способом выполнить/получить  что-то в/из семантической БД ингео не предоставляет.
 
а SemDbTable.SelectData, InsertData мною использоваля лишь раз в тривиальном случае. 
 
В основном нужны именно агрегирующие запросы из нескольких таблиц по сложному критерию.
 
Если бы ингео вместо ExecSQL отдавал бы ссылку на ADOConnection, то это решило бы все подобные проблемы програмных модулей. _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Михаил Власов
 
  
  Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 14:17    Заголовок сообщения: Re: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				 	  | APopov писал(а): | 	 		  | Здравствуйте, Михаил! Надеюсь возможности ExecSQL не будут "порезаны" критически и вы предупредите о накладываемых ограничениях. | 	  
 
Пока ограничения будут связаны только с "урезанием" доступа к служебным таблицам ИнГео (INGEO_*).
 
 	  | APopov писал(а): | 	 		  | Если бы ингео вместо ExecSQL отдавал бы ссылку на ADOConnection, то это решило бы все подобные проблемы програмных модулей. | 	  
 
Начиная с ИнГео 4.6 на клиенте вообще нет никакого *Connection, ни ADO, ни BDE, ни какого другого.
 
 
Весь доступ к семантике делается через серверный шлюз.
 
 
В ExecSQL следует использовать запросы, совместимые с SQL92, так как он более-менее нормально поддерживается большинством СУБД.
 
 
В собственных специализированных модулях можно использовать свои настройки для прямого подключения к SQL серверу и работы со своими прикладными таблицами напрямую через любые библиотеки к конкретной СУБД.
 
 
Одно "но": не стоит вносить изменения в семантические таблицы слоев в обход API ИнГео. _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 19:50    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Михаил Власов писал(а): | 	 		  | В ExecSQL следует использовать запросы, совместимые с SQL92, так как он более-менее нормально поддерживается большинством СУБД.  | 	  
 
Значит код 
 
 	  | Код: | 	 		  |  ExecSQL ( ... LEFT JOIN ... ) | 	  
 
 в версии  4.6 не будет приводить к ошибке?
 
 
 	  | Михаил Власов писал(а): | 	 		  | В собственных специализированных модулях можно использовать свои настройки для прямого подключения к SQL серверу и работы со своими прикладными таблицами напрямую через любые библиотеки к конкретной СУБД.  | 	  
 
В таком случае возникает вопрос с хранением параметров подключения. Ведь при доступе к семантическое базе параметры берутся с сервера ингео и соединение устанавливается автоматически при запуске клиента. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Чт 07 Фев 2013 21:38    Заголовок сообщения: Re: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Михаил Власов писал(а): | 	 		  | Пока ограничения будут связаны только с "урезанием" доступа к служебным таблицам ИнГео (INGEO_*). | 	  
 
Я надеюсь вы не по этой маске будете резать   
 
некоторые наши модули используют дополнительно создаваемые таблицы через ExecSQL, которыя я именовал как INGEO_SIS_*, чтобы не показывались среди справочников ингео, да и вообще чтоб были похожи на ваши системные.
 
Например, таблица INGEO_SIS_PARAMS, чтобы хранить большие настройки модулей в бинарном или xml формате, ибо ничего из предоставляемого средствами ингео для этих целей не подошло  
 
 
 	  | Михаил Власов писал(а): | 	 		  Начиная с ИнГео 4.6 на клиенте вообще нет никакого *Connection, ни ADO, ни BDE, ни какого другого.
 
Весь доступ к семантике делается через серверный шлюз. | 	  
 
А не будет ли тут существенных тормозов? или сервер ингео станет таки поддерживать многопроцессорность?
 
 
 	  | Михаил Власов писал(а): | 	 		  | В собственных специализированных модулях можно использовать свои настройки для прямого подключения к SQL серверу и работы со своими прикладными таблицами напрямую через любые библиотеки к конкретной СУБД. | 	  
 
Это да. просто надоело в каждом модуле заводить свою настройку для конекта к семанике, хочется какое-то единообразное решение. и при развёртывании тоже суета: указать коннект к семантике для ингео, указать коннекты туда же тем же так же для N доп модулей.
 
 
 	  | Михаил Власов писал(а): | 	 		  | Одно "но": не стоит вносить изменения в семантические таблицы слоев в обход API ИнГео. | 	  
 
И это да. но всё-таки хотелось бы иметь возможность заставить ингео сбросить кеш для указанной сем таблицы слоя...   
 
 
Спасибо за ответы! _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Михаил Власов
 
  
  Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
  | 
		
			
				 Добавлено: Пт 08 Фев 2013 07:42    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Максим Орлов писал(а): | 	 		  
 
Значит код 
 
 	  | Код: | 	 		  |  ExecSQL ( ... LEFT JOIN ... ) | 	  
 
 в версии  4.6 не будет приводить к ошибке? | 	  
 
Не будет приводить к ошибке.
 
 	  | Максим Орлов писал(а): | 	 		  | В таком случае возникает вопрос с хранением параметров подключения. Ведь при доступе к семантическое базе параметры берутся с сервера ингео и соединение устанавливается автоматически при запуске клиента. | 	  
 
Вы можете создать свою таблицу для хранения настроек. А подключаться используя ADO, ODBC или нативные средства подключения к вашей СУБД.
 
Возможно ваша СУБД вообще не связана с СУБД, используемой ИнГео. _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Михаил Власов
 
  
  Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
  | 
		
			
				 Добавлено: Пт 08 Фев 2013 07:51    Заголовок сообщения: Re: Транзакции | 
				     | 
			 
			
				
  | 
			 
			
				 	  | APopov писал(а): | 	 		  
 
Я надеюсь вы не по этой маске будете резать   
 
некоторые наши модули используют дополнительно создаваемые таблицы через ExecSQL, которыя я именовал как INGEO_SIS_*, чтобы не показывались среди справочников ингео, да и вообще чтоб были похожи на ваши системные.
 
Например, таблица INGEO_SIS_PARAMS, чтобы хранить большие настройки модулей в бинарном или xml формате, ибо ничего из предоставляемого средствами ингео для этих целей не подошло   | 	  
 
Нет, конечно.
 
Доступ к нашим таблицам ограничивается по полному совпадению названия таблицы.
 
 
 	  | APopov писал(а): | 	 		  | А не будет ли тут существенных тормозов? или сервер ингео станет таки поддерживать многопроцессорность? | 	  
 
В 4.6 мы ОЧЕНЬ много внимания уделили повышению быстродействия и комфорта работы пользователей.
 
Существенных тормозов пока не наблюдаем.
 
Если что и выявится при бета-тестировании - поправим.
 
 
 	  | APopov писал(а): | 	 		  Это да. просто надоело в каждом модуле заводить свою настройку для конекта к семанике, хочется какое-то единообразное решение. и при развёртывании тоже суета: указать коннект к семантике для ингео, указать коннекты туда же тем же так же для N доп модулей.
 
 | 	  
 
В 4.6 понятия "параметры коннекта к семантике" на клиенте нет.
 
У клиента вообще может отсутствовать физическая возможность прямого доступа к семантической СУБД. Только через сервер данных ИнГео.
 
 	  | APopov писал(а): | 	 		  И это да. но всё-таки хотелось бы иметь возможность заставить ингео сбросить кеш для указанной сем таблицы слоя...   
 
 | 	  
 
 
При изменениях в семантике штатными средствами ИнГео нет необходимости сбрасывать кэш.
 
 
А менять семантику нештатными средствами очень не рекомендуется. _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Максим Орлов
 
  
  Зарегистрирован: 29.09.2011 Сообщения: 12 Откуда: Донецк, Украина
  | 
		
			
				 Добавлено: Пт 08 Фев 2013 23:03    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Спасибо за ответ. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |