![]() |
【转帖】[求助]arx与数据库连接并读数据画线 有问题
[求助]arx与数据库连接并读数据画线 有问题
[求助]arx与数据库连接并读数据画线 有问题 void connect() { _connectionptr m_pconnection; coinitialize(null); m_pconnection.createinstance(__uuidof(connection)); // 在ado操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。 try { // 打开本地access库db1.mdb m_pconnection->open("provider=microsoft.jet.oledb.4.0;data source=e:\pipedata.mdb","","",admodeunknown); } catch(_com_error &e) { afxmessagebox("数据库连接失败,确认数据库pipedata.mdb是否在当前路径下!") return false; } //建立数据集 //------------------------------------------------------------------------------------- _recordsetptr m_precordset; m_precordset.createinstance(__uuidof(recordset)); // 在ado操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些意想不到的错误。 try { m_precordset->open("select * from dxl", m_pconnection.getinterfaceptr(), // 获取库接库的idispatch指针 adopendynamic, adlockoptimistic, adcmdtext); } catch(_com_error *e) { afxmessagebox(e->errormessage()); } //-------------------------------------------------------------------------------------- //读取数据 //-------------------------------------------------------------------------------------- _variant_t var,var1,var2; acgepoint3d startpt,endpt; char *strid,*strid1,*str1,*str2; //float x,y; try { if(!m_precordset->bof) m_precordset->movefirst(); else { afxmessagebox("表内数据为空"); return 1; } // 读入库中各字段 while(!m_precordset->adoeof) { var = m_precordset->getcollect("起始点号"); if(var.vt != vt_null) strid= _com_util::convertbstrtostring((_bstr_t)var); //_variant_t转字符串 var2 = m_precordset->getcollect("终止点号"); if(var.vt != vt_null) strid1= _com_util::convertbstrtostring((_bstr_t)var2); //_variant_t转字符串 while(!m_precordset->adoeof) { m_precordset->open("select * from dxp", m_pconnection.getinterfaceptr(), // 获取库接库的idispatch指针 adopendynamic, adlockoptimistic, adcmdtext); var1=m_precordset->getcollect("物探点号"); str1= _com_util::convertbstrtostring((_bstr_t)var); //_variant_t转字符串 if(strid==str1) { var1 = m_precordset->getcollect("x"); if(var1.vt != vt_null) startpt[x]=_com_util::convertbstrtostring((_bstr_t)var1); var1 = m_precordset->getcollect("y"); if(var1.vt != vt_null) startpt[y]=_com_util::convertbstrtostring((_bstr_t)var1); } if(strid1==str1) { var1 = m_precordset->getcollect("x"); if(var1.vt != vt_null) endpt[x]=_com_util::convertbstrtostring((_bstr_t)var); var1 = m_precordset->getcollect("y"); if(var1.vt != vt_null) endpt[y]=_com_util::convertbstrtostring((_bstr_t)var); } m_precordset->movenext(); acdbline *pline = new acdbline(startpt, endpt); //构建直线类(acdbline)的对象 acdbblocktable *pblocktable; //指向块表的指针 acdbhostapplicationservices()->workingdatabase()->getsymboltable(pblocktable, acdb::kforread); //将指针指向当前数据库中的块表 acdbblocktablerecord *pblocktablerecord; //指向块表记录的指针 //将块表记录的指针指向当前块表的模型空间记录 pblocktable->getat(acdb_model_space, pblocktablerecord, cdb::kforwrite); pblocktable->close(); //关闭块表 acdbobjectid lineid; //指向id pblocktablerecord->appendacdbentity(lineid, pline); //将指向添加到块表记录 pblocktablerecord->close(); //关闭块表记录 pline->close(); return lineid; } m_precordset->movenext(); } } catch(_com_error *e) { afxmessagebox(e->errormessage()); } //-------------------------------------------------------------------------------------- //关闭数据集 m_precordset->close(); m_precordset = null; //-------------------------------------------------------------------------------------- //关闭数据库连接 //-------------------------------------------------------------------------------------- if(m_pconnection->state) m_pconnection->close(); m_pconnection= null; return 0; } |
| 所有的时间均为北京时间。 现在的时间是 05:22 PM. |