2009-11-05 29 views
3

我想訪問MySQL數據庫,並且想要在我的Qt/C++程序中從+讀取數據並將其寫入數據庫。對於讀寫過程,我嘗試使用QSqlTableModel,QSqlTableRcord和QSqlDatabase,因爲這是一個非常令人愉快的方法,沒有太多SQL命令,我不喜歡這些或其他原因(處理自己)。 我得到了一個類似的方法已經運行(所以數據庫已經運行),但它是雜亂無章。 所以簡單的問題是什麼我的例子這幾行代碼中做錯了: 使用Qt 4.5.x 測試數據庫有3列:浮法X,浮法Y,BLOB IMG將QSqlRecord提交到Qt中的MySQL數據庫

int main(){ 
QImage img("./some_image.png"); 
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
db.setHostName("localhost"); 
db.setDatabaseName("test"); 
db.setPort(3306); 
db.setUserName("root"); 
db.setPassword("xxxxxxx"); 
if (!db.open()) 
    qDebug("Mising db/unable to open"); 
else { 
    QSqlTableModel model; 
    qDebug() << "tables::" <<db.tables(); //so I see the table exists and gets detected 
    model.setTable("test_table"); 

    QSqlRecord rec; 
    rec.setValue(0,1.0f); 
    rec.setValue(1,2.0f); 

    QByteArray ba; 
    QBuffer buffer(&ba); 
    buffer.open(QIODevice::WriteOnly); 
    img.save(&buffer, "PNG"); 
    rec.setValue(2,ba); 

    model.insertRecord(0,rec); 
    qDebug() << model.lastError().text(); 
    if (!model.submitAll()) 
     qDebug() << "Submit all did not work"; 
    return 0; 
    } 

THX爲任何幫助,我已經從Qt文檔的一端運行到另一端,但沒有找到解決方案,我已經浪費了5個小時這樣做,所以我很感激任何提示(除非你建議完全不同)。

+0

您可以加入如何失敗一些信息呢? model.lasterror()。text()的價值是什麼? – Andomar 2009-11-05 18:22:12

+0

它是空的,所以我真的無言以對 – drahnr 2009-11-06 10:03:50

回答

6

您的QSqlRecord沒有定義任何字段。您需要添加

rec.append(QSqlField("x", QVariant::Double)); 
rec.append(QSqlField("y", QVariant::Double)); 
rec.append(QSqlField("img", QVariant::Image)); 

您設置的值之前