📄 operatedb.cpp
字号:
#include<rxregsvc.h>
#include<aced.h>
#include<adslib.h>
#include<rxregsvc.h>
#include<dbsymtb.h>
#include<dbents.h>
#include<dbapserv.h>
#include<dbidmap.h>
#include<lngtrans.h>
#include<dbltrans.h>
#include<dbmain.h>
#include<string.h>
#include<stdlib.h>
#include<geassign.h>
#include<adscodes.h>
#include<dbelipse.h>
//
#include <afxdb.h>
#include <odbcinst.h>
#include <windows.h> //先包含WINDOWS.H
#include <rxdefs.h> //后包含ARX的头文件StdAfx.h
#include <adslib.h>
#include "StdAfx.h"
#include "afx.h"
void readDB();
void printAll();
//
void readDB()
{
// acutPrintf("Hello,Object ARX 2000.");
AcDbDatabase *pDb;
char *fname;
struct resbuf *rb;
rb=acutNewRb(RTSTR);
int stat=acedGetFileD("Pick a drawing",NULL,"dwg",0,rb);
if((stat!=RTNORM)||(rb==NULL))
{
acutPrintf("\n用户没有指定文件名,退出等程序!");
return;
}
fname=(char*)acad_malloc(strlen(rb->resval.rstring)+1);
strcpy(fname,rb->resval.rstring);
acutRelRb(rb);
pDb=new AcDbDatabase(Adesk::kFalse);
//88888888888888888888888888888888888888888888888888888888888888888888888888888
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile,sPath;
CString sSql;
//获取主程序所在路径,存在sPath中
/* GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
*/
// sExcelFile = sPath + "\\dwg.xls"; // 要建立的Excel文件
sPath.Format("%s",fname);
sExcelFile = sPath + ".xls";
TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构(姓名、年龄)
sSql = "CREATE TABLE Exceldemo (Code NUMBER,Class TEXT)";
database.ExecuteSQL(sSql);
}
AfxMessageBox("Excel文件创建成功!");
}
CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
}
END_CATCH_ALL;
//88888888888888888888888888888888888888888888888888888888888888888888888888888
if(pDb->readDwgFile(fname)!=Acad::eOk)
{
acutPrintf("\n 文件已被其它用户打开,退出程序!");
return;
}
//
/* //fname=fname+'.txt';
CFile file;
file.Open("dwg.txt",CFile::modeCreate|CFile::modeWrite);//LPCTSTR("fname")
CArchive ar(&file,CArchive::store);
CString trans;*/
//
AcDbBlockTable *pBlkTbl;
pDb->getSymbolTable(pBlkTbl,AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);
pBlkTbl->close();
AcDbBlockTableRecordIterator *pBlkTblRcdItr;
pBlkTblRcd->newIterator(pBlkTblRcdItr);
AcDbBlockReference *pABRefer;
AcDbEntity *pEnt;
CString temp;
// AcadBlo
int i=1;
for(pBlkTblRcdItr->start();!pBlkTblRcdItr->done();pBlkTblRcdItr->step())
{
pBlkTblRcdItr->getEntity(pEnt,AcDb::kForRead);
temp=(pEnt->isA())->name();
if(!abs(temp.Compare("AcDbBlockReference")))
acutPrintf("类名:%s\n",(pEnt->isA())->name());
//
/* trans.Format("类名:%s\r\n",(pEnt->isA())->name());
ar<<trans;//((pEnt->isA())->name());//trans;
*/
//
//********************************************************************************************
sSql.Format("INSERT INTO Exceldemo (Code,Class) VALUES (%d,'%s')",i,(pEnt->isA())->name());//(pEnt->isA())->name(),hindribmater.AllocSysString()
TRY
{
database.ExecuteSQL(sSql);
// AfxMessageBox("Excel文件写入成功!");
}
CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
}
END_CATCH_ALL;
i++;
//********************************************************************************************
pEnt->close();
}
pBlkTblRcd->close();
delete pBlkTblRcdItr;
delete pDb;
//
// ar.Close();
// file.Close();
//
//8888888888888888888888888888888888888888888888888888888888888888888888888
// 关闭数据库
database.Close();
//8888888888888888888888888888888888888888888888888888888888888888888888888
acutPrintf("\n 完成读取数据库,退出程序!");
}
void printAll()
{
AcDbDatabase *pDb;
char *fname;
struct resbuf *rb;
rb=acutNewRb(RTSTR);
int stat=acedGetFileD("Pick a drawing",NULL,"dwg",0,rb);
if((stat!=RTNORM)||(rb==NULL))
{
acutPrintf("\n用户没有指定文件名,退出等程序!");
return;
}
fname=(char*)acad_malloc(strlen(rb->resval.rstring)+1);
strcpy(fname,rb->resval.rstring);
acutRelRb(rb);
pDb=new AcDbDatabase(Adesk::kFalse);
if(pDb->readDwgFile(fname)!=Acad::eOk)
{
acutPrintf("\n 文件已被其它用户打开,退出程序!");
return;
}
AcDbBlockTable *pBlkTbl;
pDb->getSymbolTable(pBlkTbl,AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);
pBlkTbl->close();
AcDbBlockTableRecordIterator *pBlkTblRcdItr;
pBlkTblRcd->newIterator(pBlkTblRcdItr);
AcDbBlockReference *pABRefer;
AcDbEntity *pEnt;
CString temp;
for(pBlkTblRcdItr->start();!pBlkTblRcdItr->done();pBlkTblRcdItr->step())
{
pBlkTblRcdItr->getEntity(pEnt,AcDb::kForRead);
temp=(pEnt->isA())->name();
if(!abs(temp.Compare("AcDbBlockReference")))
// acutPrintf("类名:%s\n",(pEnt->isA())->name());
pEnt->close();
}
pBlkTblRcd->close();
delete pBlkTblRcdItr;
delete pDb;
acutPrintf("\n 完成读取数据库,退出程序!");
}
//
void initApp()
{
acutPrintf("\n 初始化函数\n");
acedRegCmds->addCommand("OPERATEDB_COMMANDS",
"READDB",
"READDB",
ACRX_CMD_MODAL,readDB);
acedRegCmds->addCommand("OPERATEDB_COMMANDS",
"PRINTALL",
"PRINTALL",
ACRX_CMD_MODAL,printAll);
}
//
void unloadApp()
{
acutPrintf("\n unload the function\n");
acedRegCmds->removeGroup("OPERATEDB_COMMANDS");
}
//
extern"C"AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg,void*appId)
{
switch (msg){
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(appId);
acrxDynamicLinker->registerAppMDIAware(appId);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
default:
break;
}
return AcRx::kRetOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -