• 3343阅读
  • 5回复

[讨论]QTableWidgetItem使用mysql语句查询问题 [复制链接]

上一主题 下一主题
离线q洁士铭
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-10
回复本帖可获得1点威望奖励!
每人最多可获奖1次,奖池剩余1点威望 (中奖几率10%)
— 本帖被 XChinux 执行加亮操作(2016-04-11) —
  1. void MainWindow::listbutton_chick ()
  2. {
  3.     this->db = QSqlDatabase::addDatabase("QMYSQL");
  4.     this->db.setHostName("localhost");//127.0.0.1   192.168.78.23
  5.     this->db.setUserName("root");
  6.     this->db.setPassword("123456");
  7.     this->db.setDatabaseName("student");
  8. bool ok = db.open();
  9.     int row = 0;
  10.     int column = 0;
  11.     int count = 0;
  12.     QSqlQuery *query = new QSqlQuery;
  13.     query->exec ("select * from information");
  14.     if(ok)
  15.     {
  16.         while(query->next ())
  17.         {
  18.             count = count+1;
  19.         }
  20.         ui->tableWidget->setRowCount (count);
  21.         ui->tableWidget->setColumnCount (count);
  22. for(int i=0 ; i<count ; i++)//通过前面获取到的数据记录数count进行循环赋值
  23.         {
  24.             ui->tableWidget->setItem(row , column , new QTableWidgetItem(query.value (0).toString ()));   //为什么这里不能查询到数据库里的数据,数据库连接时正常的???
  25.             ui->tableWidget->setItem(row , column+1 , new QTableWidgetItem(query.value (0).toString ()));
  26.             ui->tableWidget->setItem(row , column+2 , new QTableWidgetItem(query.value (0).toString ()));
  27.             row++;
  28.             column=0;
  29.         }
  30.         ui->tableWidget->resizeColumnsToContents ();//设置所有行和列根据内容调整大小
  31.         ui->tableWidget->resizeRowsToContents ();
  32.     }
  33.     else
  34.     {
  35.         qDebug()<<"Error open database because"<<this->db.lastError().text();
  36.     }
  37.     this->db.close ();
  38. }

编译运行就会提示出错QSqlQuery::value: not positioned on a valid record
离线15927174837

只看该作者 1楼 发表于: 2016-04-10
数据库里的数据是匹配的吗
离线robinsonsir

只看该作者 2楼 发表于: 2016-04-11
写的有问题。。。。
while(query->next ())
        {
            count = count+1;
        }

这里已经到最后一个数据的下一个了。

建议:
int count = query.size();

ui->tableWidget->setRowCount (count);
ui->tableWidget->setColumnCount (count);

while(query->next ())
        {
            ui->tableWidget->setItem(row , column , new QTableWidgetItem(query.value (0).toString ()));  
            ui->tableWidget->setItem(row , column+1 , new QTableWidgetItem(query.value (0).toString ()));
            ui->tableWidget->setItem(row , column+2 , new QTableWidgetItem(query.value (0).toString ()));
            row++;
            column=0;
        }
离线q洁士铭

只看该作者 3楼 发表于: 2016-04-13
回 15927174837 的帖子
15927174837:数据库里的数据是匹配的吗 (2016-04-10 15:57) 

是匹配的,单独输出SQL语句是可以的
离线q洁士铭

只看该作者 4楼 发表于: 2016-04-13
回 robinsonsir 的帖子
robinsonsir:写的有问题。。。。
while(query->next ())
        {
            count = count+1;
        }
....... (2016-04-11 10:34) 

可是现在问题是ui->tableWidget->setItem(row , column , new QTableWidgetItem(query.value (0).toString ()));  语句里的SQL语句执行不了;如果换成的字符串就可以
离线robinsonsir

只看该作者 5楼 发表于: 2016-04-14
回 q洁士铭 的帖子
q洁士铭:
可是现在问题是ui->tableWidget->setItem(row , column , new QTableWidgetItem(query.value (0).toString ()));  语句里的SQL语句执行不了;如果换成的字符串就可以


  1. while(query->next ())
  2.         {
  3.             count = count+1;
  4.         }
  5. 这里执行完,QSqlQuery::value: not positioned on a valid record,此时query已经指向了一条无效的记录了。
  6. 这样写试过了吗?    int count = query.size();




快速回复
限100 字节
 
上一个 下一个