Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt MS访问和QSqlQuery_Qt - Fatal编程技术网

Qt MS访问和QSqlQuery

Qt MS访问和QSqlQuery,qt,Qt,我的英语不是很好,但我会尽力描述我的问题。 所以,我有原始代码: base = QSqlDatabase::addDatabase("QODBC"); QSettings sets("FlowModel","Settings"); currentBase = sets.value("currentBase").toString(); base.setHostName("localhost"); base.setDatabaseName(QString("DRI

我的英语不是很好,但我会尽力描述我的问题。 所以,我有原始代码:

    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();
它工作正常,组合框从数据库中获取所有材料; 但下一步是这个代码:

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

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

pLine->setText(queryInfo.value(fieldNo).toString());
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();
但它不起作用!查询返回一个空字符串(“”),但必须是一个数字。我在Access中测试了此SQL查询,它在那里工作正常。请帮助了解我遇到了什么问题。 谢谢您。 另外,我尝试使用QSqlQuery::lastError().text()方法,但它没有向我报告任何内容。 我不明白那是什么…因为此表可以通过以下代码打开:

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

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

pLine->setText(queryInfo.value(fieldNo).toString());
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(

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