Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Максим Орлов

Зарегистрирован: 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 Заголовок сообщения: |
|
|
Спасибо за ответ. |
|
Вернуться к началу |
|
 |
|