📄 subject_55800.htm
字号:
<p>
序号:55800 发表者:jackey2 发表日期:2003-10-13 11:17:39
<br>主题:ODBC中dynaset的问题
<br>内容:看下面的ODBC数据库程序:<BR> SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, "Microsoft Visual FoxPro Driver", "DSN=mydbs\0DBQ=C:\\GGG\0member.dbf\0Description=测试增加数据源");<BR> m_db.Open("mydbs",FALSE,FALSE,"ODBC;",FALSE);<BR> m_st.m_pDatabase=&m_db;//m_st是CDatabase类的对象;m_st是CRst(由CRecordset派生而来)的对象<BR>m_st.Open(CRecordset::dynaset,_T("select * from member"),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>内容: 太旧了??!!<BR> FOXPRO如果真的这样,我真的感到非常悲哀了,在我们计划生育系统中,FOXPRO正如日中天,没有其它数据库,正在开发的新管理软件全是它.<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 09:17:33
<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>
回复者:金枪鱼 回复日期: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 和 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> 那就是ODBC数据对象是全局的,程序一旦启动,自动连接和打开,直到程序退出时才关闭和销毁。如果中间有操作要求关闭数据库,也可以关闭,操作完毕后再打开。<BR> ODBC记录集保持局部性,需要时才创建,创建后马上是使用,使用完毕立即销毁。<BR> 数据库对象和记录集对象一般都使用指针方式,基本不用直接的对象方式。<BR><BR> 你上面说的这段代码连是否操作成功都没有检查,并莫说捕捉数据库异常了。<BR> SQlConfigDataSource函数应该检查返回是否成功,数据库和记录集的打开应该捕捉数据库异常try {....} cahtch () {....}<BR> 至于SQLConfigData的参数是否正确我不知道,自己查对MSDN吧,因为我平常只针对SQLServer和Access使用,没有对FoxPro用过。<BR><BR>下面代码片断仅供参考 <BR>------连接数据库<BR>if(!pDb->IsOpen())<BR> {<BR> try <BR> {<BR> pDb->OpenEx(_T("DSN=")+CurPState.DataSourceName+_T(";PWD=")+CurPState.DbPwd,CDatabase::noOdbcDialog);<BR> }<BR> catch(CDBException * e)<BR> {<BR> CString strTip=_T("数据库连接失败!\n\n");<BR> strTip+=_T("因为:\n\n")+e->m_strError;<BR> MessageBox(strTip,_T("错误"),MB_OK | MB_ICONSTOP);<BR> e->Delete();<BR> return FALSE;<BR> } <BR> }<BR>-----构造记录集指针<BR>CRecordset *pRs=new CRecordset(pDb);<BR>if(!pRs) <BR> {<BR> MessageBox(_T("内存不足!"),_T("错误"),MB_OK|MB_ICONSTOP);<BR> return FALSE;<BR> }<BR>-----准备SQL查询语句<BR> <BR> CString str_SQL=_T("Select * from A01TypeTable order by Type_ID");<BR><BR>-----打开记录集<BR> try<BR> {<BR> pRs->Open(CRecordset::dynaset,str_SQL,CRecordset::readOnly);<BR> }<BR> catch(CDBException *e)<BR> {<BR> CString strTip=_T("数据记录连接失败!\n\n");<BR> strTip+=_T("因为:\n\n")+e->m_strError;<BR> MessageBox(strTip,"错误",MB_OK | MB_ICONSTOP);<BR> e->Delete();<BR> delete pRs;//销毁指针<BR> pRs=NULL; //避免也指针<BR> return FALSE;<BR> }<BR>------<BR><BR> 至于你说CDBList 和 CMsDgriCtrl ,基本上就没有人使用,因为可操作性太差,并且MSDN中可能连帮助说明都没有。是在要使用可以去看看一些网站上的说明吧。<BR> 我一般使用CListrCtrl控件,稳当,但它的效率不高。<BR> 水晶报表可以,不过我没有用过。<BR> 另外网站上还有个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 + -