QSqlQuery 执行完 SELECT 语句后,调用.size函数总是返回-1……找不到原因,求助

欢香Love 2013-07-02 08:23:24
代码如下:

bool OpenTempSeriesDB( QString strDBFile)
{
QSqlDatabase pTempDB = QSqlDatabase::addDatabase("QSQLITE", "SeriDatabase");

pTempDB.setHostName("localhost");
pTempDB.setDatabaseName( strDBFile ); (strDBFile是指定的数据库文件)

if ( !pTempDB.open() )
{
qDebug()<<"连接数据库失败,请检查数据库设置!";
return false;
}

return true;
}


if( !OpenTempSeriesDB(strDBFile, bUseDefaultSeriesDB) )
{
return false;
}

// 数据库操作
QSqlQuery RS( QSqlDatabase::database( "SeriDatabase" ) );

RS.exec("SELECT COUNT(UID) FROM Tables WHERE UID = '123456'" )

RS.size() == -1 ( 总是返回 -1 , 找不到原因啊 )



...全文
1466 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lala_achun 2014-03-31
  • 打赏
  • 举报
回复
看看文档吧,还没结贴,我还想查Qt5.0以上版本有没有解决qsqlquery对sqlite驱动 size的问题呢 Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes.
dearwsjj 2013-07-04
  • 打赏
  • 举报
回复
可能的原因如下: 1. 数据库的连接是否为有效连接。SQLITE数据库无论路径是否有效,open总是返回true。如果在windows系统下,注意路径字符串的传入等是否正确。 2. SQL语句是否有误。建议先在sql工具下测试运行一遍,是否能正常运行。
欢香Love 2013-07-04
  • 打赏
  • 举报
回复
谢谢,我这里RS.size() ,是想返回刚才RS执行查询结果 的“记录数目”,看查询出了 几行记录,正常情况下应该是大于等于0的
欢香Love 2013-07-04
  • 打赏
  • 举报
回复 1
谢谢各位,我测试了一下,发现select语句执行完之后,.size()函数返回都是-1 pRS->next(); nRecordCounts = pRS->value(0).toInt(); 最后用 上面两句话 代替了 开始代码中的 RS.size() 就可以正确获取到 select 执行完之后的符合条件的记录的数目。 此问题暂时解决,谢谢大家帮助。
  • 打赏
  • 举报
回复
这个只能自己调试,用 QSqlError,比如你的情况:
#include <QSqlError>
...
RS.exec("SELECT COUNT(UID) FROM Tables WHERE UID = '123456'" );
qDebug() << RS.lastError();
邶风 2013-07-03
  • 打赏
  • 举报
回复
你看看这样用行不行
邶风 2013-07-03
  • 打赏
  • 举报
回复
给你贴段代码上来 int DBAdvertise::getAdvertiseCount() { QString sql; QSqlQuery query(DB::m_db); bool result; int count = 0; QString time = QDate::currentDate().toString("yyyy-MM-dd"); sql.append("SELECT count(*) FROM "); sql.append(ADVERTISE_TABLE_NAME); sql.append(" WHERE time="); sql.append(DB::addYinHao(time)); result = query.exec(sql); query.next(); count = query.value(0).toInt(); return count; } 我就是这么用的
numen27 2013-07-03
  • 打赏
  • 举报
回复
看不懂,OpenTempSeriesDB函数里面就是用局部变量打开了一下数据库,这个函数是干什么用的啊?后面的代码就调用了一下这个函数然后就去执行数据库操作了,调用OpenTempSeriesDB函数的参数个数还和前面的不一样。
邶风 2013-07-03
  • 打赏
  • 举报
回复
是-1.你往后挪一个位置就行了。执行RS.next();这样再使用就行了

16,816

社区成员

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

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