• 18790阅读
  • 3回复

[已解决]查询时:函数序列错误 qodbc3 unable to execute statement [复制链接]

上一主题 下一主题
离线viki
 
只看楼主 正序阅读 楼主  发表于: 2009-04-29
— 本帖被 XChinux 执行加亮操作(2011-01-18) —
  1.     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
  2.     
  3.     //db.setHostName(QString("192.168.1.29\MTIMESQLSERVER"));
  4.     //db.setDatabaseName(QString ("Driver={sql server};server=192.168.1.29\MTIMESQLSERVER;database=MtimeCMS;uid=sa;pwd=sa;"));
  5.     //db.setUserName(QString("sa"));
  6.     //db.setPassword(QString("sa"));
  7.     db.setHostName(QString("127.0.0.1"));
  8.     db.setDatabaseName(QString ("Driver={sql server};server=127.0.0.1;database=MtimeCMS;uid=sa;pwd=sa;"));
  9.     db.setUserName(QString("sa"));
  10.     db.setPassword(QString("sa"));
  11.     bool con =db.open();
  12.     QSqlQuery query("SELECT * FROM news",db);
  13.     bool exec = query.exec();
  14.     QStringList tabelle = db.tables(QSql::Tables);
  15.     QMessageBox::about(parent,"tables",tabelle.join(","));
  16.     QMessageBox::about(parent,"con err",db.lastError().text());
  17.     QMessageBox::about(parent,"query err",query.lastError().text());


开发环境:
1、Qt 4.4.2
2、window 2003 sp2
3、本地/远程机均安装的sql server2005

问题说明:
1、使用demo 里的sqlbrowser上面代码里的连接本地和远程sqlserver均正常
2、使用代码里的本地连接时,连接成功,"tables"能返回库内的表名,但是查询失败,"query err"返回“odbc 驱动程序管理器 函数序列错误 qodbc3 unable to execute statement”
3、使用注释内的远程连接时,连接失败,"con err"返回“Sql Server不存在或访问被拒绝[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).QODBC3 :Unable to connect)”
搜索了一下,相同问题的帖子很多,但是都没有解决,麻烦高手看一下,谢谢。

已解决
1、“192.168.1.29\MTIMESQLSERVER” 里的“\”未转义
2、QSqlQuery query("SELECT * FROM news",db) 已经执行了查询,不要再调用exec,具体原因还没来的及查,待会跟进去看看
所以可以改为:
   QSqlQuery query("SELECT * FROM news",db);
或者
    QSqlQuery query(db);
    bool exec = query.exec("SELECT * FROM news");
[ 此帖被viki在2009-04-29 19:20重新编辑 ]
离线alexltr

只看该作者 3楼 发表于: 2012-12-05
这个问题困扰了我一天,百度了很久也没有找到解决办法。
最后还是在本论坛里搜索到了。谢谢这位朋友的分享。

翻回<C++ GUI Qt4 编程>第13章的开头部分看看,果然如此。
看来看书还是不够认真,总是囫囵吞枣,一知半解,
这种学习方法要不得!
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线jianlanger
只看该作者 2楼 发表于: 2010-12-30
请问一下你连的远程是,外网的还是局域网的?
离线viki
只看该作者 1楼 发表于: 2009-04-29
已解决,谢谢

1、“192.168.1.29\MTIMESQLSERVER” 里的“\”未转义,应该为“192.168.1.29\\MTIMESQLSERVER”

2、QSqlQuery query("SELECT * FROM news",db) 已经执行了查询,不要再调用exec, 具体原因还没来的及查,待会跟进去看看
所以代码中的查询语句可以改为:
  
  1. QSqlQuery query("SELECT * FROM news",db);

或者
  
  1. QSqlQuery query(db);
  2. bool exec = query.exec("SELECT * FROM news");
[ 此帖被viki在2009-04-29 19:24重新编辑 ]
快速回复
限100 字节
 
上一个 下一个