gis-liang 发表于 2007-3-30 08:37:00

[求助]arx与数据库连接并读数据画线 有问题

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