找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 742|回复: 10

[求助]:如何做到数据库复制?

[复制链接]
发表于 2003-3-10 13:27:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想将一个已经有多个层和加载了多种线型号的数据库复制到一个全新的数据库中,要求其中的实体、层、和线型一块跟随复制,该如何做到?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-3-10 14:00:57 | 显示全部楼层
你可以用acdbCurDwg ()->insert(.......);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-10 15:06:09 | 显示全部楼层
不行啊,代码如下,麻烦binbin帮我看看:

Acad::ErrorStatus es;
AcDbDatabase * pDb;
               
AcApDocument* pDoc;
pDoc=acDocManager->curDocument();
es=acDocManager->lockDocument(pDoc);
pDb=acdbHostApplicationServices()->workingDatabase();

AcDbDatabase *acDb;
acDb=new AcDbDatabase(true,true);
acDb->readDwgFile("d:\\test.dwg",_SH_DENYNO,true);

AcGeMatrix3d mat;
mat.setToIdentity();
       
es=pDb->insert(mat,acDb);//在这里返回值是es为eWasOpenForRead

es=acDocManager->unlockDocument(pDoc);

我想将外部的一个数据库实体、层复制到当前文档中。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-10 19:27:36 | 显示全部楼层
看我是这样写的:

  1.   [FONT=courier new]
  2.         AcDbDatabase *pDb = new AcDbDatabase(Adesk::kTrue);
  3.         es = pDb->readDwgFile(pFileName);
  4.         if (es != Acad::eOk){delete pDb;return ;}
  5.         pDb->getSymbolTable(pDbBlockTable, AcDb::kForRead);
  6.         es = pDbBlockTable->getAt(pBlockName,idBlock);
  7.         if (es == Acad::eOk)//指定文件找到块
  8.         {
  9.                 if (!bExplore)
  10.                 {
  11.                         pDbBlockTable->close();
  12.                        
  13.                         AcDbDatabase * pOutputDb = new AcDbDatabase(Adesk::kTrue);
  14.                         es = pDb->wblock(pOutputDb, idBlock);
  15.                         delete pDb;
  16.                        
  17.                         if (acdbCurDwg()->insert(idBlock,pBlockName,pOutputDb,true) != Acad::eOk)
  18.                         {
  19.                                 delete pOutputDb;
  20.                                 return ;
  21.                         }
  22.                         delete pOutputDb;
  23.                        
  24.                         AcDbBlockTableRecord* pMODELSPACE = NULL;
  25.                         if (acdbCurDwg()->getSymbolTable(pCurBlockTable, AcDb::kForRead)!=Acad::eOk){return ;}
  26.                         if (pCurBlockTable->getAt(ACDB_MODEL_SPACE,pMODELSPACE,AcDb::kForWrite)!=Acad::eOk){return ;}
  27.                         if (pCurBlockTable->getAt(pBlockName,idBlock)!=Acad::eOk){return ;}
  28.                         pCurBlockTable->close();
  29.                        
  30.                         AcDbBlockReference *pBR = new AcDbBlockReference();
  31.                         pBR->setBlockTableRecord(idBlock);
  32.                         pBR->setPosition(Base_point);
  33.                         pBR->setRotation(angle);
  34.                         es = pBR->setScaleFactors(scale);
  35.                         if (pMODELSPACE->appendAcDbEntity(pBR)!=Acad::eOk)
  36.                         {
  37.                                 delete pBR;
  38.                                 pMODELSPACE->close();
  39.                                 return ;
  40.                         }

  41.                         pBR->close();
  42.                         pMODELSPACE->close();
  43.                         return ;
  44.                 }
  45.         }[/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-11 10:05:47 | 显示全部楼层
谢谢binbin,在你的帮助下,实现了。真的很感谢你!
另外一个问题,有没有方法删除数据库所有实体而不遍历所有实体?
我目前是通过遍历实现,代码如下:
for(pBlkIterAnswer->start();!pBlkIterAnswer->done();pBlkIterAnswer->step())//删除当前所有实体
        {
                AcDbEntity * pEnt;
                es=pBlkIterAnswer->getEntity(pEnt,AcDb::kForWrite);
                es=pEnt->erase(Adesk::kTrue);
                pEnt->close();
               
        }
这样做我觉得太笨了,有没有更好的办法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-11 11:52:44 | 显示全部楼层
最笨的就是最好的!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-11 19:43:45 | 显示全部楼层
呵呵,这样虽然能够删除实体,但是不能将图层和线型删除。
我现在就想将数据库中所有图层、线型等全部删除,将其清空为一个最基本的数据库。
还望binbin提供建议。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-11 20:03:46 | 显示全部楼层
不如new一个!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-28 20:00:07 | 显示全部楼层
真令人羡慕!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-29 13:49:36 | 显示全部楼层
美眉就是帮的人多
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-27 11:31:23 | 显示全部楼层
好羡慕啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 17:23 , Processed in 0.422319 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表