zhangyyll 发表于 2008-5-15 22:16:00

[求助]ObjectARX连接Access数据库得程序调试问题

本帖最后由 作者 于 2008-5-16 6:50:48 编辑 <br /><br /> <p>我是个新手,以前没有学过AutoCAD和ObjectARX,也没有学过Access,希望大家帮帮忙!</p><p>我装了AutoCAD2002和ObjectARX2002,建的工程是ObjectARX2000/2000i/2002AppWizard,环境为VC++6.0,</p><p>希望通过程序打开已建好的Access数据库,并用里面的数据来建模。可是在程序的打开数据库这部分就有问题。总出现个窗口:</p><p>显示:未处理的异常 E06D7363(e06d7363),地址:7C812A7Bh</p><p>我的程序如下,还有我自己做的注释</p><p>void DrawFunction()//这个函数为命令调用的函数<br/>{<br/><font color="#dd2248" size="4">&nbsp;struct resbuf *result;<br/>&nbsp;int rc,flags;<br/>&nbsp;result =ads_newrb(RTSTR);<br/>&nbsp;<br/>&nbsp;&nbsp;result-&gt;resval.rstring=NULL;<br/>&nbsp;flags=2<font color="#000000">;//显示“Type it”按钮</font><br/>&nbsp;rc=acedGetFileD("打开数据文件<font color="#000000">",//标题<br/></font>&nbsp;&nbsp;"e:/project/database<font color="#000000">",//NULL,//默认路径</font><br/>&nbsp;&nbsp;"mdb<font color="#000000"><font color="#e61a6b">;*",</font>//默认扩展名:NULL代表“*<br/></font>&nbsp;&nbsp;flags, <font color="#000000">//控件标志</font><br/>&nbsp;&nbsp;result); <font color="#000000">//用户选择的路径<br/></font>&nbsp;<font color="#000000">//如果acedgetFileD()调用成功,就返回RTNORM,否则返回RTERROR</font><br/>&nbsp;if(rc==RTNORM)&nbsp; <font color="#000000">//ads_getFileD()调用成功<br/></font>&nbsp;&nbsp;rc=acedArxLoad(result-&gt;resval.rstring);<br/>&nbsp;CDaoDatabase db;<br/>&nbsp;CString path=result-&gt;resval.rstring; <font color="#000000">//将路径保存在字符串path中<br/></font>&nbsp;//db.Open(path,false,false,_T("")); <font color="#000000">//打开数据库</font><br/>&nbsp;db.Open(path,false,false,_T(""));<br/>&nbsp;CDaoRecordset att_rs(&amp;db);<br/>&nbsp;att_rs.Open(dbOpenDynaset,_T("select * from dian"),0);</font></p><p><font color="#000000"><font size="4">//打开数据集,dian为我建的数据库里面的一个表</font><br/></font>&nbsp;int iRecords=att_rs.GetRecordCount();//统计记录个数<br/>&nbsp;if(!att_rs.IsBOF())<br/>&nbsp;&nbsp;att_rs.MoveFirst();//把指针移到开始处<br/>&nbsp;while(!att_rs.IsEOF())<br/>&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createNewLayer();//调用建立新图层函数</p><p>&nbsp;&nbsp;COleVariant vid=att_rs.GetFieldValue("id");// 程序结构变量提取坐标数据库字段值<br/>&nbsp;&nbsp;&nbsp;&nbsp; COleVariant vx=att_rs.GetFieldValue("X");<br/>&nbsp;&nbsp;COleVariant vy=att_rs.GetFieldValue("Y");<br/>&nbsp;&nbsp;COleVariant vz=att_rs.GetFieldValue("Z");<br/>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//Temtag.endist=vEndDist.fltVal;<br/>&nbsp;&nbsp;&nbsp;&nbsp; //Sprintf(Temtag.name,"%s",vName.bstrVal);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//buffer.onlyid=vid.bstrVal;<br/>&nbsp;&nbsp;//buffer.x=vx.fltVal;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //buffer.y=vy.fltVal;<br/>&nbsp;&nbsp;//buffer.z=vz.fltVal;<br/>&nbsp;&nbsp;//i++;<br/>&nbsp;&nbsp;att_rs.MoveNext();<br/>&nbsp;}<br/>}</p><p>谢谢了!非常感谢大家了!</p>

DualF 发表于 2008-5-20 15:33:00

<p>就数据库操作呗!用ADO 或者ODBC呗。</p><p>如果用ODBC 先建立数据源 然后</p><p>CDatabase getd;<br/>CRecordset re(&amp;getd);<br/>CString su;</p><p>getd.Open(_T("Date"));&nbsp; //你的数据源名称<br/>su.Format("DELETE FROM GanWei WHERE NaiZhangDuan=%d",NZD);//这里就是SQL语句呗<br/>getd.ExecuteSQL(su); <br/>getd.Close();</p><p>ADO也一样,逐条查询方便</p><p>VC+ARX讨论群 58756233</p>

zhangyyll 发表于 2008-5-20 22:06:00

<p>非常感谢哦 ,还留了群号给我 !3Q3Q!</p>

zhangyyll 发表于 2008-5-22 07:20:00

这个问题已经解决了,呵呵,3Q!

csudyq 发表于 2009-8-10 11:29:00

<p><strong>我是个新手,刚刚入门,也遇到ObjectARX连接Access数据库的问题,现在很是烦恼,想向各位高手请教一下,谢谢!</strong></p><p><strong>你们能给我举个“ObjectARX连接Access数据库”的简单的例子:例如:我在Access里输入了两个坐标(100,100,0)(1000,500,0),然后在ObjectARX上读取这两个数据画一根直线,那程序代码怎么写啊?该怎么操作啊?我是新手,麻烦各位高手能一步一步地给我解析一下,谢谢啦!</strong></p>
页: [1]
查看完整版本: [求助]ObjectARX连接Access数据库得程序调试问题