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

📄 subject_41928.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:41928 发表者:草叶 发表日期:2003-05-30 13:23:15
<br>主题:请问,一个表的记录集能重复吗?
<br>内容:一个cmyrecordset对象,mset.open()的情况下,能用另一个同类型的记录集再打开表吗?<BR>还有,如果mset.open();怎样用sql语句查询?必须关闭记录集,再重新打开?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-05-30 20:31:51
<br>内容:这种概念很模糊。<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>
回复者:草叶 回复日期:2003-05-31 09:20:31
<br>内容:用共享方式打开两个同样的记录集后,能分别操作吗?<BR><BR>如果要执行sql语句,只能关闭记录集后再打开?不关闭行不行?<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>
回复者:金枪鱼 回复日期:2003-05-31 10:15:32
<br>内容:我是这样想的:<BR>1)共享方式打开的同一张表的两个记录集,是可以分别操作的,能够即使更新记录集中的数据,还取决于是什么样的记录集(动态/快照),另外,对一个记录集的操作不能导致数据库的死锁(你的代码不能长期占用数据库对表的操作,比如一个永远也写不完的事务,)。想一想,网络上不同计算机同时向同一个数据库中同一张表中录入数据的情况,就是你说的情况。(实际上也应该是先后发生操作,只是表现得像同步操作一样)。在代码中避免长时期占用数据库执行操作时间,是基本原则。<BR><BR>2)第二个问题,我是建议,没有测试像你说的那样行不行,也不明白有什么缺陷会存在。
<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-05-31 14:09:54
<br>内容:1)同时打开多个记录集,我担心会出奇怪的错误.对了,Access数据库能使用动态集吗?<BR><BR><BR>2)我主要是考虑查询功能,总不能每进行一次查询,就重新打开一次记录集吧?sql的where语句是否都能赋值给m-strfilter,进行更新(requery)操作?
<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-05-31 16:54:03
<br>内容:Access可定支持动态集的。SQL语句的Where条件肯定也可以通过m_strFilter成员传入,只是写法不同罢了。
<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-06-01 09:51:10
<br>内容:CString strsql;<BR>if (!m_pSet-&gt;isopen())<BR> {<BR>&nbsp;&nbsp;&nbsp;&nbsp; //error process<BR>&nbsp;&nbsp;}<BR>m_pSet-&gt;m_strfilter="";<BR>if (!m_name.isempty())<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;strsql+="[name]='";<BR>&nbsp;&nbsp;&nbsp;&nbsp;strsql+=m_name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;strsql+="'";<BR>&nbsp;&nbsp; }<BR>if(!m_xuehao==NULL)&nbsp;&nbsp; //m_xuehao为int型,这样判断他是否为空,可以吗?<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_name.isempty()) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strsql+="and";<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str1;<BR>&nbsp;&nbsp;&nbsp;&nbsp; str1.format("%d",m_xuehao);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strsql+="[xuehao]=str1";<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;…… //顺序往下<BR>&nbsp;&nbsp;&nbsp;&nbsp;……<BR>&nbsp;&nbsp; m_pSet-&gt;m_strfilter=strsql;<BR>&nbsp;&nbsp;m_pSet-&gt;ReQuery();<BR>&nbsp;&nbsp; m_pSet-&gt;movefirst();<BR>&nbsp;&nbsp;//显示记录集<BR><BR>这样一段作为查询代码可以吗?<BR>还有,日期型的值能比较大小、进行相减运算吗?<BR>如果查询字段(名字)中含有“王”字的记录,sql语句(m-strfilter)怎样构造,用什么操作符?like or in?
<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-06-01 12:11:22
<br>内容:你写的代码有些问题,估计是你没有看一下一个完全阐述MFC ODBC的“本本”。代码中的大小写错误就不提了。<BR><BR>1)在MFC ODBC中,过滤条件可以通过记录集的m_strFilter成员变量传入,如果使用这个成员变量,打开记录集时就不应该使用SQL语句了,pRs-&gt;Open(...,NULL,....);<BR>2)你传入查询条件时的写法有问题。这个成员变量的值应该相当于SQL语句Where条件的部分,但不包括“where”字符。<BR>3)在SQL语句中,表名、字段名是不要用''或者[]之类扩起来的,只有字段值才需要使用''扩起来。<BR>4)如果使用变量传入字段值,也要用''扩起来,但要注意写法,如aa是变量值,你写成'aa'就变成了错误的东西。如果使用CString来操作已经非常方便,这个我看你已经会了。<BR>5)多个查询条件可以在SQL语句中使用AND等运算。LIKE是用于模糊查询的运行符号,IN是用于是否在....中的运算。还有通配符%,这些都是我们经常在对数据库表中查询构造SQL语句时用到的运算,多看看SQL语言的参考,要不SQLServer2000联机丛书的TRANSAT_SQL部分也有非常详细的说明,并且是中文的。<BR>6)记录集打开或者在此刷新(Requery)之后,除非是空记录集,否则自动把第一条记录作为当前记录,所在此时使用MoveFirst操作时多余的,虽然不会出错。<BR>7)在SQL语句中比较日期,也应该先转换成字符串。它的计算,应在写SQL语句之前完成。当然,如果你非常精通SQL语句本身的时日类型运算,就可以在SQL语句中直接使用类型转换和运算,不过我不会。<BR><BR>2003-6-1 12:12:18

⌨️ 快捷键说明

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