2014-04-18 114 views
2

我試圖運行這個Qt代碼Qt的SQL準備失敗

QString serverName = "localhost"; 
QString dbName = "zfserver"; 
QString userName = "root"; 
QString passWord = "123456"; 

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
db.setConnectOptions(); 

db.setHostName(serverName); 
db.setDatabaseName(dbName); 
db.setUserName(userName); 
db.setPassword(passWord); 

if(db.open()) 
{ 
    QSqlQuery query; 
    query.prepare("INSERT INTO account (name, email, password, type) " 
        "VALUES (:name, :email, :password, :type)"); 
    query.bindValue(":name", "atef"); 
    query.bindValue(":email", "[email protected]"); 
    query.bindValue(":password", "123"); 
    query.bindValue(":type", "2"); 

    if (query.exec()) 
    { 
     qDebug() << "OK"; 
    } else { 
     qDebug() << "Error" << query.lastError().text(); 
    } 

    db.close(); 
} 

但我發現了這個錯誤

錯誤「使用不支持的緩衝區類型:1701601889(參數:1)QMYSQL3 :無法使用 來綁定值「

如果我更改查詢而沒有使用bindValue,它會起作用。有沒有辦法解決這個問題?

+0

1)QT是一個不同的項目。閱讀tagwiki。 2)這是什麼Qt版本? 3)這是什麼平臺? 4)這是什麼架構? 5)你爲什麼使用QMYSQL3? 5)你檢查了準備的返回值嗎? 6)你是否試圖打印出最後一個查詢? – lpapp

+0

我正在使用QT Qt 5.2.1與mingw的Windows 7,我剛剛下載QT並安裝它,並嘗試它的第一次,我不知道如何使用QMYSQL3的另一個版本,其默認的一個,當我更改查詢正常的查詢沒有準備和bindValue其繁殖沒有錯誤。 –

+0

你能回答5-6)嗎?另外,請確保您不要重複調用addDatabase,因爲它應該只調用一次。 – lpapp

回答

0

嘗試重建SQL驅動程序。

QMYSQL3似乎是舊的。