⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_55800.htm

📁 vc
💻 HTM
字号:
<p>
序号:55800 发表者:jackey2 发表日期:2003-10-13 11:17:39
<br>主题:ODBC中dynaset的问题
<br>内容:看下面的ODBC数据库程序:<BR>&nbsp;&nbsp;SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, &#34;Microsoft Visual FoxPro&nbsp;&nbsp; Driver&#34;, &#34;DSN=mydbs\0DBQ=C:\\GGG\0member.dbf\0Description=测试增加数据源&#34;);<BR>&nbsp;&nbsp;m_db.Open(&#34;mydbs&#34;,FALSE,FALSE,&#34;ODBC;&#34;,FALSE);<BR>&nbsp;&nbsp;m_st.m_pDatabase=&amp;m_db;//m_st是CDatabase类的对象;m_st是CRst(由CRecordset派生而来)的对象<BR>m_st.Open(CRecordset::dynaset,_T(&#34;select * from member&#34;),FALSE);<BR>程序运行结果:ODBC驱动程序不支持动态记录集<BR>请问:为什么参数dynaset报错而snapshot不报错,程序错在哪里?如何才能在参数为dynaset时正常运行?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-10-13 19:04:31
<br>内容:是否支持动态记录集取决于数据库,像ACCESS、SQLServer2000这样的数据库都支持动态ODBC记录集。<BR><BR>至于FoxPro吗,我就不知道了。它太旧了,我好像是5年前用过一下VFP5.0。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackey2 回复日期:2003-10-14 09:13:19
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;太旧了??!!<BR>&nbsp;&nbsp;&nbsp;&nbsp;FOXPRO如果真的这样,我真的感到非常悲哀了,在我们计划生育系统中,FOXPRO正如日中天,没有其它数据库,正在开发的新管理软件全是它.<BR>&nbsp;&nbsp;&nbsp;&nbsp;能否讨论一下,用什么数据库好呢?什么工具开发好呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackey2 回复日期:2003-10-14 09:17:33
<br>内容: 还有个问题:<BR>上面的程序运行后,字段值不能修改,提示&#34;记录集是只读&#34;,这是为什么?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-10-14 17:54:38
<br>内容:微软在出了VFP6之后就停止了VFP的开发。个人认为:由于中国的落后,部分行业使用VFP的还会延迟一段时间。<BR><BR>不过,我想VFP也应该是支持动态集的。“不支持动态集”和“记录集只读”,是你的连接参数和打开方式有问题。<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackey2 回复日期:2003-10-14 22:52:52
<br>内容:本人水平有限,还请赐教是哪地方参数出错,怎么改?<BR>大量的数据都是DBF文件,不用还不行,即是不支持动态集,也应该可写啊!,不能写怎么行啊!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackey2 回复日期:2003-10-14 22:59:03
<br>内容:另外请教:在ODBC MFC中,CDBList&nbsp;&nbsp;和 CMsDgriCtrl 怎么和数据源建立数据联系啊?<BR><BR>多谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:金枪鱼 回复日期:2003-10-15 09:01:12
<br>内容:我们在编程时,为了提高数据的访问速度,都自觉养成一种习惯:<BR>&nbsp;&nbsp;&nbsp;&nbsp;那就是ODBC数据对象是全局的,程序一旦启动,自动连接和打开,直到程序退出时才关闭和销毁。如果中间有操作要求关闭数据库,也可以关闭,操作完毕后再打开。<BR>&nbsp;&nbsp;&nbsp;&nbsp;ODBC记录集保持局部性,需要时才创建,创建后马上是使用,使用完毕立即销毁。<BR>&nbsp;&nbsp;&nbsp;&nbsp;数据库对象和记录集对象一般都使用指针方式,基本不用直接的对象方式。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;你上面说的这段代码连是否操作成功都没有检查,并莫说捕捉数据库异常了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;SQlConfigDataSource函数应该检查返回是否成功,数据库和记录集的打开应该捕捉数据库异常try {....}&nbsp;&nbsp;cahtch () {....}<BR>&nbsp;&nbsp;&nbsp;&nbsp;至于SQLConfigData的参数是否正确我不知道,自己查对MSDN吧,因为我平常只针对SQLServer和Access使用,没有对FoxPro用过。<BR><BR>下面代码片断仅供参考&nbsp;&nbsp;&nbsp;&nbsp;<BR>------连接数据库<BR>if(!pDb-&gt;IsOpen())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDb-&gt;OpenEx(_T(&#34;DSN=&#34;)+CurPState.DataSourceName+_T(&#34;;PWD=&#34;)+CurPState.DbPwd,CDatabase::noOdbcDialog);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(CDBException * e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString strTip=_T(&#34;数据库连接失败!\n\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTip+=_T(&#34;因为:\n\n&#34;)+e-&gt;m_strError;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(strTip,_T(&#34;错误&#34;),MB_OK | MB_ICONSTOP);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e-&gt;Delete();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>-----构造记录集指针<BR>CRecordset *pRs=new CRecordset(pDb);<BR>if(!pRs) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&#34;内存不足!&#34;),_T(&#34;错误&#34;),MB_OK|MB_ICONSTOP);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>-----准备SQL查询语句<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str_SQL=_T(&#34;Select * from A01TypeTable order by Type_ID&#34;);<BR><BR>-----打开记录集<BR>&nbsp;&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRs-&gt;Open(CRecordset::dynaset,str_SQL,CRecordset::readOnly);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;catch(CDBException *e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString strTip=_T(&#34;数据记录连接失败!\n\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTip+=_T(&#34;因为:\n\n&#34;)+e-&gt;m_strError;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(strTip,&#34;错误&#34;,MB_OK | MB_ICONSTOP);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e-&gt;Delete();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete pRs;//销毁指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRs=NULL;&nbsp;&nbsp;//避免也指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>------<BR><BR>&nbsp;&nbsp; 至于你说CDBList&nbsp;&nbsp;和 CMsDgriCtrl ,基本上就没有人使用,因为可操作性太差,并且MSDN中可能连帮助说明都没有。是在要使用可以去看看一些网站上的说明吧。<BR>&nbsp;&nbsp; 我一般使用CListrCtrl控件,稳当,但它的效率不高。<BR>&nbsp;&nbsp; 水晶报表可以,不过我没有用过。<BR>&nbsp;&nbsp; 另外网站上还有个CGridCtrl,效果不错,但可能还有些BUG。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -