2014-04-18 144 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似乎是旧的。