我的英语不是很好,但我会试着描述一下我的问题。所以,我有了原始代码:
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());但它并没有起作用!查询返回空字符串(“”),但必须是数字。我在Access中测试了这个SQL查询,它工作正常。请帮我理解一下我有什么问题。谢谢。附注:我尝试使用QSqlQuery::lastError().text()方法,但它什么也没有报告。我不明白那是什么…因为这个表可以通过下面的代码打开:
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(
发布于 2012-10-30 01:00:06
问题已经解决了。在行之前,pLine->setText(queryInfo.value(fieldNo).toString());必须使用方法QSqlQuery::next();
https://stackoverflow.com/questions/13112940
复制相似问题