Тема: Обсуждение работы с AcDbDatabase

С ObjectARX работаю уже долго, и сложилось впечатление о том, что при работе с базами и документами происходит какая-то каша.
Первый вопрос хочу задать такой. Есть код для работы с базой данных...
AcDbDatabase* pDb = new AcDbDatabase(...)
pDb->readDwgFile(...)
Если нет ни одного открытого документа, то все попытки работать с базой, как это приведено выше - приводят к плачевным результатам.
В хелпе как то не убедительно прожовано, что когда открывается база new AcDbDatabase(...), то она привязывается зачем-то (Зачем???) к текущему документу и т.п.
Вопрос для обсуждения: Что происходит при создании и открытии базы, и каким боком ко всему этому относится текущий AcApDocument?
Есть еще вопросы, но потом...

Re: Обсуждение работы с AcDbDatabase

Встречный вопрос:
А как Вы собираетесь вызвать этот код если нет ни одного открытого документа?
Ведь пока документов нет то ни одна команда не сработает

Re: Обсуждение работы с AcDbDatabase

> KonstantinM
AcDbDatabase* pDb = new AcDbDatabase(true, true) и никакой привязки к какому-либо документу

> Roman
Очень просто этот код можно использовать. Например, я при старте приложения создаю таким образом базу, в которую загружаю библиотеку блоков. Затем, я эту библиотеку использую для отрисовки своих примитивов в любом количестве открытых документов, без реальной вставки блоков в документы.

Re: Обсуждение работы с AcDbDatabase

> archimag
AcDbDatabase* pDb = new AcDbDatabase(true, true) и никакой привязки к какому-либо документу
Казалось бы... Я тоже так открываю... и в документации написано. Но если начать открывать закрывать уже документы программным способом, то при попытке сохранения базы открытой как написано выше - случаются неприятности. Т.е. если открыть базу, закрыть тот документ в котором она была закрыта и записать базу... то error... так что флажок отвязки от документа - как то специфично работает.
(Можно открыть базу и закрыть все документы - попытаться что-нибудь с базой сделать (как ее при этом залочить вообще не понятно :)

Re: Обсуждение работы с AcDbDatabase

Вот нашел в мануале по описанию метода AcApDocManager::document(AcDbDatabase*)
Databases created by ObjectARX applications will be automatically associated with the document of the context in which they were created. This is then the document that the database will have its Undo recorded. It is also the document whose Transaction Manager must be used for objects from the database.
Отсюда видно, что если создать базу и закрыть документ в контексте которого создан документ, то результат непредсказуем. Задней частью мозга помню, что читал когда-то, что перед закрытием документа Autodesk рекомендует закрыть все базы данных, которые ассоциированы с этим документом.
Возвращаюсь к вопросу, который хотел задать. Надо создать базу и держать ее открытой длительное время. При этом если убивают документ в контексте которого была эта база создана, то не хотелось бы закрывать базу, потом ее опять открывать... Второй флажок конструктора базы вроде как для этого и предназначен, но такая база после закрытия документа ведет себя очень подозрительно и время от времени падает... Работает ли у кого такая фича? Проверяли? База открыта только для чтения/использования или записи/модификации? Сохраняли ли такую базу документ из контекста которого база была создана уже убит?

Re: Обсуждение работы с AcDbDatabase

> archimag
Но загрузить приложение можно только если есть открытый документ!
Иначе просто "appload" написать негде wink

Re: Обсуждение работы с AcDbDatabase

> Roman
Но загрузить приложение можно только если есть открытый документ!
Иначе просто "appload" написать негде wink
Да... можно. Ведь не обязательно писать appload. Это можно сделать программным образом (перехватить какое-нибудь сообщение, когда документы закрыты и программно загрузить arx-ы). Другое дело - зачем?