• 6342阅读
  • 4回复

Qt调用MSSQL数据库的存储过程出现问题 [复制链接]

上一主题 下一主题
离线zxzxdtc
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-30
我用qt的 QSqlquery 用以下方法访问数据存储过程
  1. query.prepare("exec searchSpeed ? , ? output");
  2. query.bindValue(0, "start");
  3. query.bindValue(1, 0, QSql::Out);
  4. bFlag = query.exec();
  5. if (bFlag)
  6. {
  7. qDebug()<<query.boundValue(1);
  8. test = query.boundValue(1).toInt();
  9. qDebug()<<test;
  10. if (test < 0)
  11. {
  12. bFlag = false;
  13. }
  14. else
  15. {
  16. searchSpeed = test;
  17. qDebug()<<"模糊查找速度为:"<<searchSpeed;
  18. bFlag = true;
  19. }
  20. }
  21. else
  22. {
  23. QSqlError error = query.lastError();
  24. QString str = error.text();
  25. QMessageBox::critical(0, QObject::tr("Error"),QObject::tr("%1").arg(str));
  26. }

存储过程如下:
  1. ALTER proc [dbo].[searchSpeed]
  2. @start varchar(1000),
  3. @output int output
  4. as
  5. DECLARE @i int
  6. DECLARE @rand int
  7. DECLARE @search varchar(100)
  8. DECLARE @begin_date datetime
  9. DECLARE @end_date datetime
  10. DECLARE @second datetime
  11. Set @i = 0
  12. select @begin_date = GETDATE()
  13. WHILE @i < 10
  14. BEGIN
  15. Set @i =@i +1
  16. set @rand = cast(ceiling(rand() * 20) as int)
  17. set @search = '%' +CONVERT(varchar(50),@rand) +'%'
  18. select * from AdventureWorks.HumanResources.Employee where CONVERT(varchar(50),EmployeeID)+CONVERT(varchar(50),rowguid)+CONVERT(varchar(50),Title)+CONVERT(varchar(50),LoginID) like @search
  19. END
  20. select @end_date = GETDATE()
  21. set @output = datediff(ms,@begin_date,@end_date)
  22. return @output

我想做的就是获取连续进行10次模糊查找的时间,但是这个存储过程在SQL Server下调用能看到output的时间返回结果,但是在qt下调用就只返回0,而且也不报错,请问如何修正??跪求!

离线zxzxdtc

只看该作者 1楼 发表于: 2013-01-30
有人么?求教啊!!
离线XChinux

只看该作者 2楼 发表于: 2013-01-30
没有错误提示么?lastError()
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zxzxdtc

只看该作者 3楼 发表于: 2013-01-30
引用第2楼XChinux于2013-01-30 12:43发表的  :
没有错误提示么?lastError()


这个真没有,所以我才纠结!
离线hehui

只看该作者 4楼 发表于: 2013-01-30
回 楼主(zxzxdtc) 的帖子
楼主试试下面的代码看看有没有什么输出!
另外你的返回值是什么类型?能转成整形还是时间型?

if (bFlag)
{
   if(!query.first()){
      qDebug()<<"No record!";
      return;
   }


  test = query.value(0).toInt();
  qDebug()<<test;


qDebug()<<query.boundValue(1);
test = query.boundValue(1).toInt();
qDebug()<<test;
快速回复
限100 字节
 
上一个 下一个