首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Access和QSqlQuery

MS Access和QSqlQuery
EN

Stack Overflow用户
提问于 2012-10-29 04:55:06
回答 1查看 528关注 0票数 1

我的英语不是很好,但我会试着描述一下我的问题。所以,我有了原始代码:

代码语言:javascript
复制
    base = QSqlDatabase::addDatabase("QODBC");

 QSettings sets("FlowModel","Settings");

 currentBase = sets.value("currentBase").toString();

    base.setHostName("localhost");

    base.setDatabaseName(QString("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%1").arg(currentBase));

 if(base.open())

  QMessageBox::information(0,"Все отлично!","База данных открыта","Ок");

 else

  QMessageBox::information(0,"Все не ахти!",base.lastError().text(),"Ок");



 QSqlQuery queryMaterials("SELECT * FROM Материал",base);

 int fieldNo = queryMaterials.record().indexOf("Название");

 int i = 0;

 while (queryMaterials.next()) {   

  comboBox->insertItem(i++,queryMaterials.value(fieldNo).toString());

     }

 queryMaterials.clear();

它工作正常,组合框从数据库中获取所有材料;但下一步是下面的代码:

代码语言:javascript
复制
QSqlQuery queryInfo("SELECT * FROM Свойства_материала WHERE Название='Вода'",base);

fieldNo = queryInfo.record().indexOf("P");

pLine->setText(queryInfo.value(fieldNo).toString());

但它并没有起作用!查询返回空字符串(“”),但必须是数字。我在Access中测试了这个SQL查询,它工作正常。请帮我理解一下我有什么问题。谢谢。附注:我尝试使用QSqlQuery::lastError().text()方法,但它什么也没有报告。我不明白那是什么…因为这个表可以通过下面的代码打开:

代码语言:javascript
复制
QSqlDatabase accessBase = QSqlDatabase::addDatabase("QODBC");

 accessBase.setHostName("localhost");

 accessBase.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=D:/ИТ.mdb");

 if(accessBase.open())

  QMessageBox::information(0,"Все отлично!","База данных открыта","Ок");

 else

  QMessageBox::information(0,"Все не ахти!",accessBase.lastError().text(),"Ок");

 QTableView tableGhost;

 QSqlTableModel tableDB;

 QString whtpn = QInputDialog::getText(0, "Какую таблицу открыть?",

   "Какую таблицу открыть?");

 tableDB.setTable(whtpn);

 tableDB.select();

 tableDB.setEditStrategy(QSqlTableModel::OnFieldChange);
 tableGhost.setModel(&tableDB);

tableGhost.show();

一切都很好。但是通过查询no(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 01:00:06

问题已经解决了。在行之前,pLine->setText(queryInfo.value(fieldNo).toString());必须使用方法QSqlQuery::next();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13112940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档