我的代码:
QSqlQuery myqry;
myqry.prepare( "CREATE TABLE IF NOT EXISTS Item (ItemCat VARCHAR(20), ItemId VARCHAR(7) UNIQUE PRIMARY KEY, ItemName VARCHAR(30), ItemBrand VARCHAR(20), ItemModel VARCHAR(10), ItemQuantity INTEGER, ItemPrice DOUBLE)" );
if( !myqry.exec() )
qDebug() << myqry.lastError();
else
qDebug() << "Table created!";
QString category, id, name, brand, model, quantity, price;
myqry.prepare( "INSERT INTO Item (ItemCat, ItemId, ItemName, ItemBrand, ItemModel, ItemQuantity, ItemPrice) VALUES ('"+category+"', '"+id+"', '"+name+"', '"+brand+"', '"+model+"', '"+quantity+"', '"+price+"')" );
if( !myqry.exec() )
{
QMessageBox::information(this, "Problem", "Failed to save the Data" + myqry.lastError());
}
产生错误:
error: no match for 'operator+' (operand types are 'const char [24]' and 'QSqlError')
QMessageBox::information(this, "Problem", "Failed to save the Data" + myqry.lastError());
^
我还在标题和cpp文件中包含了#include,并且一旦运行qmake并运行,就会重现相同的错误。我不知道问题是什么,有人可以帮我解决这个问题吗?问题在于运营商+。 :(
答案 0 :(得分:1)
使用prepare
时,最好像(see Documentation)
myqry.prepare("INSERT INTO Item (ItemCat, ItemId, ItemName, ItemBrand, ItemModel, ItemQuantity, ItemPrice) VALUES (:category, :id, :name, :brand, :model, :quantity, :price)");
myqry.bindValue(":category", category);
myqry.bindValue(":id", id);
myqry.bindValue(":name", name);
myqry.bindValue(":brand", brand);
myqry.bindValue(":model", model);
myqry.bindValue(":quantity", quantity);
myqry.bindValue(":price", price);
if(!myqry.exec())
{
// ...
}
答案 1 :(得分:-1)
您正在尝试使用对象类型(或非文字类型)连接文字。
如果您的值是基本类型,则可以使用std::to_string(value)将非字符串类型附加到string
。
否则你通常应该寻找一些to_string()
方法......
特别是,大多数Qt
个对象都有text()个功能。
如果您查看QString documentation,则会看到+ operator
仅接受文字类型,例如其他QString
,const char*
等等。