Поиск атрибутов блока без транзакции.

Автор Тема: Поиск атрибутов блока без транзакции.  (Прочитано 3082 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн exilerusАвтор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 2
Здравствуйте, коллеги.
Возник вопрос, опишу ситуацию.
Есть чертеж, на котором находятся блокреференсы. Есть приложение, которое оценивает блоки по их атрибутам и вносит в таблицу приложения ( я "подписался" на события базы данных, при каждом изменении, добавлении или удалении происходит сканирование чертежа). Сканирование происходит, используя транзакцию.
Проблема в том, что когда я использую другое свое приложение для того, чтобы поместить блок на чертеж, я тоже открываю транзакцию, в этот момент срабатывает событие и я получаю ошибку из-за двух транзакций одновременно.

Подскажите, пожалуйста, что можно с этим сделать. Может быть можно просмотреть все блоки и их атрибуты без использования транзакции?

Заранее спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Может быть можно просмотреть все блоки и их атрибуты без использования транзакции?
Можно. Два варианта:
1. Эмуляция транзакции: TransactionManager.StartOpenCloseTransaction
Пример: http://adn-cis.org/sozdanie-polyline3d-bez-ispolzovaniya-tranzakczii.html
2. ObjectId.Open/Close
Пример: http://adn-cis.org/kak-poluchit-neispolzuemyie-vneshnie-ssyilki-rastryi-i-podlozhki.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
я "подписался" на события базы данных, при каждом изменении, добавлении или удалении происходит сканирование чертежа
Какая жуть.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн exilerusАвтор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 2
Спасибо за ответ!
Про "жуть" - это попытка посмотреть на реалтайм.
Есть другие варианты?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
Странная ошибка. Разве нельзя держать сколько угодно открытых транзакций? Проблема должна возникать, только если несколько раз будет открыт на запись один и тот же объект. Нет? К тому же по идее событие изменения объекта будет в момент закрытия транзакции, его редактировавшей - т.е. сначала одна транзакция закрывается, потом открывается другая.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Странная ошибка.
Достаточно часто в событиях базы вообще нельзя использовать транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Есть другие варианты?
Да. Не сканировать базу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн exilerusАвтор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 2
Да, Александр прав. Вся ошибка зависит от событий базы.
Не так смертельно будет этого не иметь, но хочется видеть изменения в реальном времени, вот и пробую.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Разве нельзя держать сколько угодно открытых транзакций?
Можно, конечно.
Проблема должна возникать, только если несколько раз будет открыт на запись один и тот же объект.
Вроде бы, транзакции прощают даже такое.
К тому же по идее событие изменения объекта будет в момент закрытия транзакции, его редактировавшей
Насколько я понимаю - нет. Событие изменения возникает в момент изменения. А при закрытии транзакции происходит закрытие объекта.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитата: avc от 07-05-2018, 10:53:58

    К тому же по идее событие изменения объекта будет в момент закрытия транзакции, его редактировавшей

Насколько я понимаю - нет. Событие изменения возникает в момент изменения. А при закрытии транзакции происходит закрытие объекта.
Да. Если подразумевать под закрытием транзакции Commit. Происходит не просто закрытие объекта, а подтверждение изменений. Если нет Commit, то вместо закрытия объекта (Close), происходит отказ от изменений (Abort) и объект восстанавливается к состоянию до его открытия.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
я "подписался" на события базы данных, при каждом изменении, добавлении или удалении происходит сканирование чертежа
А зачем сканировать все? Почему не смотреть только те объекты, которые "изменились, добавились, удалились"?

Еще есть вариант - следить за изменением состояния блокировки документа. Она вроде как тесно связана с транзакцией. Но это тёмный лес в который опасно ходить и о котором мало написано