Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 10-11-2016, 19:21:12

Название: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:21:12
В цикле добавляю примитивы в базу данных из массива.
Для сокращения вопроса даю не полный код.
Надеюсь для понимания проблемы этого шаблона
кода будет достаточно.

Код - vb.net [Выбрать]
  1. Dim arr() as Entity ' массив примитивов
  2. ...
  3. Dim tr as Transaction ...
  4. Using tr
  5. Dim btr as BlockTableRecord ...
  6. ...
  7. For i as iteger =0 to arr.Length - 1
  8. try
  9.    dim id as ObjectID =  btr.AppendEntity(arr(i))
  10.    tr.addNewlyCreatedDBObjectt(arr(i), true)
  11. Catch ex as Exception
  12. '  тут дает ошибку eWrongDataBase
  13. End try
  14.    ' tr.Commit ???
  15. Next
  16.    ' tr.Commit ???
  17. End Using

Вопросы: 
1) Что не так с базой?
2) Где правильнее делать tr.commit в теле цикла for..Next или в конце блока Using?




Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Ривилис от 10-11-2016, 19:25:22
Для сокращения вопроса даю не полный код.
Зря.
Надеюсь для понимания проблемы этого шаблона
кода будет достаточно.
Нет.
Откуда берутся примитивы, которые ты добавляешь?
Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Пекшев aka Modis от 10-11-2016, 19:28:05
не хватает tr.AddNewlyCreatedDBObject(ent, true);
2) Где правильнее делать tr.commit в теле цикла for..Next или в конце блока Using?
в конце блока Using конечно-же
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:28:51
Откуда берутся примитивы, которые ты добавляешь?
Примитивы я создаю динамическим выделением памяти в других подпрограммах

к примеру так
arr(i) = new line(...)
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:29:52
в конце блока Using конечно-же
Ну вообщем-то у меня и было сделано  в конце блока Using,
т.к. по каждой итерации мне показалось будет не правильно.
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:32:05
Когда генерирую массив arr
все типы элементов прокатывают, только для типа элемента MLeader такая ошибка (использую acad 2012)
Значит что-то не так делаю в подпрограммах где создаю выноски

Можно как-то проверить элемент arr(i) MLeader
 что с ним что-то не так и почему его база не хочет принимать?
Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Пекшев aka Modis от 10-11-2016, 19:37:40
не хватает tr.AddNewlyCreatedDBObject(ent, true);
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:39:46
не хватает tr.AddNewlyCreatedDBObject(ent, true);
В полной версии кода это строка есть.
Я позднее добавил эту строку в вопрос.
Думал она не важна, а потом проверил без нее вообще фатальная ошибка.

Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 19:42:41
Все же позднее положу полный код функции и подпрограмму создания
объекта MLeader, а то так действительно не разобраться.

Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Пекшев aka Modis от 10-11-2016, 19:42:58
Возможно не хватает этого:
MLeader leader = new MLeader();
leader.SetDatabaseDefaults();
но без кода - никуда))
Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Ривилис от 10-11-2016, 19:45:20
все типы элементов прокатывают, только для типа элемента MLeader такая ошибка (использую acad 2012)
Ну например добавляешь не в текущую базу. Или в нём есть какие-то ссылки на посторонние базы.
Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Ривилис от 10-11-2016, 19:59:27
Возможно не хватает этого:
MLeader leader = new MLeader();
leader.SetDatabaseDefaults();
но без кода - никуда))
Скорее даже вот такого:
Код - C# [Выбрать]
  1. leader.SetDatabaseDefaults(db);
где db - база, в которую будет добавляться MLeader.
Кстати, а стиль MLeader ты используешь из какой базы?
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 20:00:26
MLeader leader = new MLeader();
leader.SetDatabaseDefaults();

Эти строки есть
Мультивыноска это же составной объект

у меня так написано

Код - vb.net [Выбрать]
  1. Public function CreateMLeader(...) as MLeader
  2. dim Leader = New MLeader
  3. dim mt = New Mtext
  4. ...
  5. Leader.Mtext = mt
  6. Leader.AddLeaderLine(...)
  7. ...
  8. Return Leader
  9.  
  10. End function
  11.  
  12.  
  13. arr(i) = CreateMLeader(...)


Может нужно соблюдать очередность добавления
сначала
Leader в базу
затем leader.MText
или  наоборот

или достаточно как у меня написано просто добавить только элемент arr(i)
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 20:04:04
leader.SetDatabaseDefaults(db);
Блин а вот такой строки у меня нет
У меня просто без db
leader.SetDatabaseDefaults()
Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Ривилис от 10-11-2016, 20:07:49
Блин а вот такой строки у меня нет
У меня просто без db
leader.SetDatabaseDefaults()
Ты добавляешь в текущую базу?
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 20:16:14
Ты добавляешь в текущую базу?

Я добавляю открываемую методом ReadDWGFile(...)

Ура!
Убрал из кода создания выноски
строку
leader.SetDatabaseDefaults()
и все заработало!

Я позднее выложу полный код функций для
окончательного решения вопроса.

Название: Re: Ошибка eWrongDataBase
Отправлено: Александр Ривилис от 10-11-2016, 20:33:57
Я добавляю открываемую методом ReadDWGFile(...)

Ура!
Убрал из кода создания выноски
строку
leader.SetDatabaseDefaults()
и все заработало!
Значит нужно использовать leader.SetDatabaseDefaults(db) с этой базой.
Название: Re: Ошибка eWrongDataBase
Отправлено: Алексей (IdeaSoft) от 10-11-2016, 20:40:46
Всем спасибо!
Этот вопрос с добавлением в базу считаю решенным.
Ведь примитивы в базу добавляются.

Есть еще другие вопросы
по мультивыноскам по их стилей другого.
Для этого я добавлю новую тему.
И в нее уже положу полный код моих функций по мультивыноскам.