• 9508阅读
  • 4回复

[提问]QSqlQuery::exec: database not open [复制链接]

上一主题 下一主题
离线huangwenchua
 

只看楼主 倒序阅读 楼主  发表于: 2013-10-12
  1. bool Widget::creatConnection()
  2. { QSqlDatabase db=QSqlDatabase::addDatabase("QODBC","dbtemp");
  3.     //db.setHostName("127.0.0.1");
  4.     QString dsn=QString::fromLocal8Bit("DRIVER={SQL SERVER};SERVER=127.0.0.1;database=test");
  5.     db.setDatabaseName(dsn);
  6.     db.setUserName("sa");
  7.     db.setPassword("111111");
  8.     if(!db.open())
  9.    {
  10.         QMessageBox::critical(0,QLabel::trUtf8("数据库连接失败"),db.lastError().text());
  11.     return false;
  12.     }
  13.     else{QString str;
  14.         QMessageBox::information(this,"Information",str.fromLocal8Bit("数据库连接成功"));
  15.         qDebug()<<str.fromLocal8Bit("数据库连接成功");
  16.          }
  17.     QSqlQuery query(db);
  18. }
  19. void Widget::on_pushButton_clicked()
  20. {
  21.     QSqlQueryModel *model=new QSqlQueryModel;
  22.     model->setQuery("select * from dbo.id");
  23.     model->setHeaderData(0,Qt::Horizontal,tr("id"));
  24.     QTableView *view=new QTableView;
  25.     view->setModel(model);
  26.     view->show();
  27. [color=#008ef1][font=arial]
  28. [/font][/color]
  29. [color=#008ef1][font=arial]
  30. [/font][/color]
  31. [color=#008ef1][font=arial]
  32. [/font][/color]
  33. 运行时输出 [color=#008ef1][font=arial]QSqlQuery::exec: database not open  什么原因求大神告知[/font][/color]
离线XChinux

只看该作者 1楼 发表于: 2013-10-12
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC","dbtemp");

你创建的连接名是dbtemp,而你用QSqlQuery(Model)时未指明connectionName(即dbtemp),这样的话,它连接的是默认连接,而你没有创建默认连接,所以这里失败了.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线jiang__30
只看该作者 2楼 发表于: 2013-10-13
  1. query.exec("select * from  ");
  2. model.setQuery(query);



离线huangwenchua

只看该作者 3楼 发表于: 2013-10-14
具体能说的再清楚些吗 不会弄,或者去看什么类
离线foxgod

只看该作者 4楼 发表于: 2014-02-27
回 XChinux 的帖子
XChinux:QSqlDatabase db=QSqlDatabase::addDatabase("QODBC","dbtemp");
你创建的连接名是dbtemp,而你用QSqlQuery(Model)时未指明connectionName(即dbtemp),这样的话,它连接的是默认连接,而你没有创建默认连接,所以这里失败了. (2013-10-12 17:28) 

就是我数据库打开,我先查询了一下一个表里面的一个字段,然后再更新这个表,用这样的方法更新总是失败
int USessionId =100;
bool  value =query.prepare("UPDATE users SET SessionId = ? WHERE UserID = userID");
query.bindValue(0,USessionId);
bool isOk = query.exec();
isok,总是显示错误,错误原因是 QSqlError(2036, "QMYSQL3: Unable to bind value", "Using unsupported buffer type: 538976308  (parameter: 1)")

但是这样写,就是OK的
nt USessionId =100;
bool  value =query.prepare("UPDATE users SET SessionId = 100 WHERE UserID = 1101");
bool isOk = query.exec();

或是这样写也OK
nt USessionId =100;
bool  value =query.prepare("UPDATE users SET SessionId = ?  WHERE UserID = userID");
query.bindValue(0,100);
bool isOk = query.exec();

难道不能用变量吗??
快速回复
限100 字节
 
上一个 下一个