[求助]arx与数据库连接并读数据画线 有问题
<p>void connect()<br/>{ <br/> _ConnectionPtr m_pConnection;<br/> CoInitialize(NULL);<br/> m_pConnection.CreateInstance(__uuidof(Connection));</p><p> // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,<br/> // 因为它有时会经常出现一些想不到的错误。<br/> try <br/> { <br/> // 打开本地Access库db1.mdb<br/> m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\PipeData.mdb","","",adModeUnknown);</p><p> }<br/> catch(_com_error &e)<br/> {<br/> AfxMessageBox("数据库连接失败,确认数据库PipeData.mdb是否在当前路径下!")<br/> return FALSE;<br/> } <br/> //建立数据集<br/> //-------------------------------------------------------------------------------------<br/> _RecordsetPtr m_pRecordset;<br/> m_pRecordset.CreateInstance(__uuidof(Recordset));</p><p> // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,<br/> // 因为它有时会经常出现一些意想不到的错误。<br/> try<br/> { <br/> m_pRecordset->Open("SELECT * FROM DXL", <br/> m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针<br/> adOpenDynamic,<br/> adLockOptimistic,<br/> adCmdText);<br/> }<br/> catch(_com_error *e)<br/> {<br/> AfxMessageBox(e->ErrorMessage());<br/> <br/> } </p><p><br/> //--------------------------------------------------------------------------------------<br/> //读取数据<br/> //--------------------------------------------------------------------------------------<br/> _variant_t var,var1,var2; <br/> <br/> AcGePoint3d startpt,endpt;<br/> char *strID,*strID1,*str1,*str2;<br/> //float X,Y;<br/> try<br/> {<br/> if(!m_pRecordset->BOF)<br/> m_pRecordset->MoveFirst();<br/> else<br/> {<br/> AfxMessageBox("表内数据为空");<br/> return 1;<br/> }</p><p> // 读入库中各字段<br/> while(!m_pRecordset->adoEOF)<br/> {<br/> var = m_pRecordset->GetCollect("起始点号");<br/> if(var.vt != VT_NULL)<br/> strID= _com_util::ConvertBSTRToString((_bstr_t)var); //_variant_t转字符串<br/> var2 = m_pRecordset->GetCollect("终止点号");<br/> if(var.vt != VT_NULL)<br/> strID1= _com_util::ConvertBSTRToString((_bstr_t)var2); //_variant_t转字符串<br/> while(!m_pRecordset->adoEOF)<br/> {<br/> m_pRecordset->Open("SELECT * FROM DXP", <br/> m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针<br/> adOpenDynamic,<br/> adLockOptimistic,<br/> adCmdText);<br/> var1=m_pRecordset->GetCollect("物探点号");<br/> str1= _com_util::ConvertBSTRToString((_bstr_t)var); //_variant_t转字符串<br/> if(strID==str1)<br/> {<br/> var1 = m_pRecordset->GetCollect("X");<br/> if(var1.vt != VT_NULL)<br/> startpt=_com_util::ConvertBSTRToString((_bstr_t)var1);<br/> var1 = m_pRecordset->GetCollect("Y");<br/> if(var1.vt != VT_NULL)<br/> startpt=_com_util::ConvertBSTRToString((_bstr_t)var1);<br/> }<br/> if(strID1==str1)<br/> {<br/> var1 = m_pRecordset->GetCollect("X");<br/> if(var1.vt != VT_NULL)<br/> endpt=_com_util::ConvertBSTRToString((_bstr_t)var);<br/> var1 = m_pRecordset->GetCollect("Y");<br/> if(var1.vt != VT_NULL)<br/> endpt=_com_util::ConvertBSTRToString((_bstr_t)var);<br/> }<br/> m_pRecordset->MoveNext();<br/> AcDbLine *pLine = new AcDbLine(startpt, endpt); //构建直线类(AcDbLine)的对象</p><p> AcDbBlockTable *pBlockTable; //指向块表的指针</p><p> acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead); //将指针指向当前数据库中的块表</p><p> AcDbBlockTableRecord *pBlockTableRecord; //指向块表记录的指针</p><p> //将块表记录的指针指向当前块表的模型空间记录</p><p> pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, cDb::kForWrite);</p><p> pBlockTable->close(); //关闭块表</p><p> AcDbObjectId lineId; //指向ID</p><p> pBlockTableRecord->appendAcDbEntity(lineId, pLine); //将指向添加到块表记录</p><p> pBlockTableRecord->close(); //关闭块表记录</p><p> pLine->close(); </p><p> return lineId;</p><p><br/> }<br/> </p><p> m_pRecordset->MoveNext();</p><p> <br/> }<br/> }<br/> catch(_com_error *e)<br/> {<br/> AfxMessageBox(e->ErrorMessage());<br/> } </p><p> //--------------------------------------------------------------------------------------<br/> //关闭数据集<br/> m_pRecordset->Close();<br/> m_pRecordset = NULL; <br/> //--------------------------------------------------------------------------------------<br/> //关闭数据库连接<br/> //--------------------------------------------------------------------------------------<br/> if(m_pConnection->State)<br/> m_pConnection->Close();<br/> m_pConnection= NULL;<br/> return 0;<br/>}</p><p></p>
页:
[1]