1

私の英語はあまり上手ではありませんが、私の問題を説明しようと思います。だから、私は原始的なコードを持っています:

    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());

そして、それはうまくいきませんでした!クエリは空の文字列( "")を返しますが、数値である必要があります。このSQLクエリをAccessでテストすると、正しく機能します。私が抱えている問題を理解するのを手伝ってください。ありがとうございました。PS 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(

4

1 に答える 1

0

問題は解決しました。行の前pLine->setText(queryInfo.value(fieldNo).toString()); メソッドQSqlQuery::next();を使用する必要がありました。

于 2012-10-29T17:00:05.647 に答える