Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Вложенные справочники

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Максим Орлов



Зарегистрирован: 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_*).

Я надеюсь вы не по этой маске будете резать Embarassed
некоторые наши модули используют дополнительно создаваемые таблицы через ExecSQL, которыя я именовал как INGEO_SIS_*, чтобы не показывались среди справочников ингео, да и вообще чтоб были похожи на ваши системные.
Например, таблица INGEO_SIS_PARAMS, чтобы хранить большие настройки модулей в бинарном или xml формате, ибо ничего из предоставляемого средствами ингео для этих целей не подошло Sad

Михаил Власов писал(а):
Начиная с ИнГео 4.6 на клиенте вообще нет никакого *Connection, ни ADO, ни BDE, ни какого другого.
Весь доступ к семантике делается через серверный шлюз.

А не будет ли тут существенных тормозов? или сервер ингео станет таки поддерживать многопроцессорность?

Михаил Власов писал(а):
В собственных специализированных модулях можно использовать свои настройки для прямого подключения к SQL серверу и работы со своими прикладными таблицами напрямую через любые библиотеки к конкретной СУБД.

Это да. просто надоело в каждом модуле заводить свою настройку для конекта к семанике, хочется какое-то единообразное решение. и при развёртывании тоже суета: указать коннект к семантике для ингео, указать коннекты туда же тем же так же для N доп модулей.

Михаил Власов писал(а):
Одно "но": не стоит вносить изменения в семантические таблицы слоев в обход API ИнГео.

И это да. но всё-таки хотелось бы иметь возможность заставить ингео сбросить кеш для указанной сем таблицы слоя... Embarassed

Спасибо за ответы!

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 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 писал(а):

Я надеюсь вы не по этой маске будете резать Embarassed
некоторые наши модули используют дополнительно создаваемые таблицы через ExecSQL, которыя я именовал как INGEO_SIS_*, чтобы не показывались среди справочников ингео, да и вообще чтоб были похожи на ваши системные.
Например, таблица INGEO_SIS_PARAMS, чтобы хранить большие настройки модулей в бинарном или xml формате, ибо ничего из предоставляемого средствами ингео для этих целей не подошло Sad

Нет, конечно.
Доступ к нашим таблицам ограничивается по полному совпадению названия таблицы.

APopov писал(а):
А не будет ли тут существенных тормозов? или сервер ингео станет таки поддерживать многопроцессорность?

В 4.6 мы ОЧЕНЬ много внимания уделили повышению быстродействия и комфорта работы пользователей.
Существенных тормозов пока не наблюдаем.
Если что и выявится при бета-тестировании - поправим.

APopov писал(а):
Это да. просто надоело в каждом модуле заводить свою настройку для конекта к семанике, хочется какое-то единообразное решение. и при развёртывании тоже суета: указать коннект к семантике для ингео, указать коннекты туда же тем же так же для N доп модулей.

В 4.6 понятия "параметры коннекта к семантике" на клиенте нет.
У клиента вообще может отсутствовать физическая возможность прямого доступа к семантической СУБД. Только через сервер данных ИнГео.
APopov писал(а):
И это да. но всё-таки хотелось бы иметь возможность заставить ингео сбросить кеш для указанной сем таблицы слоя... Embarassed


При изменениях в семантике штатными средствами ИнГео нет необходимости сбрасывать кэш.

А менять семантику нештатными средствами очень не рекомендуется.

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Максим Орлов



Зарегистрирован: 29.09.2011
Сообщения: 12
Откуда: Донецк, Украина

СообщениеДобавлено: Пт 08 Фев 2013 23:03    Заголовок сообщения: Ответить с цитатой

Спасибо за ответ.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB