2012-10-28 88 views
1

我的英語不是很好,但我會盡力描述我的問題。 所以,我有原始代碼:MS Access和QSqlQuery

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查詢,它在那裏工作正確。請幫助瞭解我有什麼問題。 謝謝。 P.S.我試圖使用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(); 

而且一切ok。但通過查詢沒有(

回答

0

問題已經解決 線之前 pLine->的setText(queryInfo.value(fieldNo)的ToString()); 只好用方法QSqlQuery ::下一個();