|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
07.04.2012, 01:28 | #1 | |
Транзакции AutoCAD .NET DLL
päällikön suunnittelijat
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63
|
||
Просмотров: 3342
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
У вас по сути 2 вопроса в одном, "экран кода" требуется для "настройки" транзакции - внутри которой примитивов может создаваться, удаляться и меняться произвольное количество (каждый тоже примерно в 1 строку).
p.s. Библиотеки такие есть - это COM.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
Друзья, подскажите, если для Sub все делается внутри транзакции, то как быть с Function? Return по идее должен быть после Commit.
Допустим, функция должна возвращать выбранный примитив, и мы его хотим редактировать. Но ведь транзакция закрыта! Как правильно нужно делать? |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
В функции ты можешь использовать транзакцию как аргумент,
а в вызывающей команде (Sub) , будет использоваться другая транзакция, главное чтобы функция возвращала то что нужно, например ObjectId какого-нибудь объекта и тд Еще можно использовать в функции одну и ту же транзакцию, что и в вызывающей команде, но в этом случае не закрывать её, а передавать подтверждение транзакции в основную команду в этом случае не нужно использовать Using ... End Using для транзакции и тем более Abort() Экспериментируй... ~'o'~ |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
2. В процессе написания программок, накапливаются некоторые функции, в том числе добавления примитивов, слоев и прочего... со временем само накопится, не парься =о)
3. Т.к. акад позволяет работать со вложенными транзакциями, то грех этим не пользоваться. Потому внутри каждой функции открываю свою транзакцию и закрываю по завершению функции. Получается наглядно и не надо следить за транзакциями. |
|||
|
||||
Но при этом обязательно нужно помнить о необходимости вызова Commit не только для текущей, но и для родительских транзакций.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
Так получается, нельзя вернуть "сам примитив", а можно только его ObjectID. Логично.
Что самое смешное, программа работает, если функция возвращает "сам примитив", до завершения транзакции, хотя это неправильно. То есть, такая логика тоже работает: Код:
|
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Если совсем точно то вернуть-то можно что угодно - другое дело с чем потом можно (или ожидается) "работать".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Дмитрий Асташев
В твоей функции MyFunction при Return pline происходит неявный вызов acTrans.Abort(), т.к. вызова acTrans.Commit() не было. Т.к. acTrans у тебя в блоке Using, то это приводит к вызову acTrans.Dispose(), а это в свою очередь если не было acTrans.Commit() приводит к вызову acTrans.Abort(). Подумай над этим. P.S.: Если у тебя есть ObjectId объекта, то ты можешь получить сам объект без транзакции, а при помощи метода ObjectId.GetObject()
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Net. Создание и модификация материала | Павлюкас | Готовые программы | 27 | 08.12.2010 10:17 |
Правило формирование записей в реестре об установленных обновлениях для AutoCAD и его вертикальных решений. | hwd | Программирование | 8 | 30.09.2010 15:07 |
Где в реестре хранится информация о том, что в системе когда-то был установлен AutoCAD? | Archeo | AutoCAD | 12 | 14.10.2009 15:24 |
Проблемы с .NET v2 в Autocad 2006 (acad.exe.config)... | Chief Justice | AutoCAD | 2 | 12.08.2006 12:44 |