ObjectARX_事务

ObjectARX中对实体的操做通常有俩种方式,一种为open/close方式,另外一种维经过事务的方式.数据库

事务:经过程序对多个对象的多步操做集合成一个操做,若是事务操做成功,则对对象的操做成功,若是事务被停止,则取消对对象的操做,使用事务的好处是能够避免以上打开对象机制的限制.函数

#define actrTransactionManager acTransactionManagerPtr()

(1)AcDbTransactionManager::startTransaction:开始事务指针

startTransaction函数的定义形式为:code

virtual AcTransaction* startTransaction() = 0;

返回值:成功返回一个AcTransaction对象实例,失败返回NULL.对象

(2)AcDbTransactionManager::endTransaction:结束事务,结束一个事务的同时提交一个事务事务中所做的修改生效.事务

endTransaction函数的定义形式为:get

virtual Acad::ErrorStatus endTransaction() = 0;

(3)AcDbTransactionManager::abortTransaction:取消事务it

abortTransaction函数的定义形式为:io

virtual Acad::ErrorStatus abortTransaction() = 0;

(4)AcTransaction::getObject:获取所需的对象指针class

getObject函数的定义形式为:

virtual Acad::ErrorStatus getObject( AcDbObject*& obj,  AcDbObjectId objectId,  AcDb::OpenMode mode, bool openErasedObject = false) = 0;

经过事务修改数据库的具体实例以下:

//获取选择集
ads_name sset;
int err = acedSSGet(_T("p"),NULL,NULL,NULL,sset);
if(err != RTNORM)
   return;

//开始事务
actrTransactionManager->startTransaction();
long length;
acedSSLength(sset,&length);
ads_name en;
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
for(long i = 0; i < length; i++)
{
acedSSName(sset,i,en);
//获取对象id
Acad::ErrorStatus es =acdbGetObjectId(eId, en);
//经过事务获取数据库对象
es = actrTransactionManager->getObject((AcDbObject*&)pEnt,eId,AcDb::kForWrite);
pEnt->setColorIndex(1);
}

//提交事务
actrTransactionManager->endTransaction();
//释放选择集
acedSSFree(sset);
相关文章
相关标签/搜索