关于QSqlQuery类的size()和numRowsAffected成员函数的问题。

niushitana 2016-06-02 10:41:02
使有的是QT5,系统是Win7 64位,数据库是装在Win7上的Sqlserver2008,程序是通用ODBC和数据库连接。下面是代码:

bool test=lsq_cx.exec(ls_sql);

lsq_cx是一个QSqlQuery,ls_sql是一条select语句,代码执行后test为true,这时候问题来了,如果我接下执行lsq_cx.size(),那么返回-1,而如果我执行lsq_cx.numRowsAffected(),会返回正确的行数。我看了下QSqlQuery的帮助,那意思是说如果是select语句的话,用size()返回结果就是正确的,如果是非select语句,那么用numRowsAffected()才会返回正确,但是实际结果怎么反过来了?还是我对英文理解得有问题?请各位达人指正。

以上,感谢赐教。


...全文
1018 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
i-like 2019-01-17
  • 打赏
  • 举报
回复
引用 8 楼 Pecodo 的回复:
你好 请问你这个size()如何解决的 我也遇到了这个问题
我这边登录验证 可以先exec(select..) 在调用.next()看返回的真假
还是想把这个size()搞明白


Qt5.9没得这个问题,但是Qt4.8.4有上面说的问题,我也想不明白,更想不明白的是,通过百度搜索发现谈论这个的并不多,难道他们都没遇到这个问题,这就邪门儿了。
Pecodo 2018-10-26
  • 打赏
  • 举报
回复
你好 请问你这个size()如何解决的 我也遇到了这个问题 我这边登录验证 可以先exec(select..) 在调用.next()看返回的真假 还是想把这个size()搞明白
比禾夜 2016-10-13
  • 打赏
  • 举报
回复
我也遇到同样情况,不知道咋回事。。。。
Little柯南 2016-06-02
  • 打赏
  • 举报
回复
引用 4 楼 niushitana 的回复:
刚才在程序里试了下,lsq_cx.isSelect()返回true,然后执行lsq_cx.size()返回-1.
isSelect()判断是不是select模式,返回-1令人太意外。但是正规代码你前面加判断再执行,就是一种程序保证,建议带上isSelect()
niushitana 2016-06-02
  • 打赏
  • 举报
回复
刚才在程序里试了下,lsq_cx.isSelect()返回true,然后执行lsq_cx.size()返回-1.
niushitana 2016-06-02
  • 打赏
  • 举报
回复
可是我明明执行的就是一条select语句,就像这样select a,b,c from table,难道isSelect还有什么玄机不成?
Little柯南 2016-06-02
  • 打赏
  • 举报
回复
下回这么操作时,使用 bool result =lsq_cx.isSelect();if(result){return lsq_cx.size()} else return lsq_cx.numRowsAffected(); 大意就是这样,你自己推敲下。很简单
Little柯南 2016-06-02
  • 打赏
  • 举报
回复
int QSqlQuery::numRowsAffected() const 当non-SELECT时,使用上面的函数,当SELECT时,需使用下面的函数 int QSqlQuery::size() const 使用isSelect()判断是否为SELECT语句。 你先判断下在做使用
niushitana 2016-06-02
  • 打赏
  • 举报
回复
有没有持其它看法的朋友?

21,491

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧