2012-04-13 81 views
1

我有这个类:我的SQL查询被切断

#include <QSqlError> 
#include <QMessageBox> 
#include <QCompleter> 
#include <QFile> 
#include <QTextStream> 
#include <QSqlQueryModel> 

#include "items.h" 

Items::Items(Ui::Store *setui) 
{ 
    form = setui; 
} 

void Items::getItem(int index, QString item) 
{ 
    if(index == 1) 
    { 
     sqlQuery = "SELECT * FROM Items WHERE Name='" + item + "'"; 
     query.exec(sqlQuery); 
     query.next(); 
     rec = query.record(); 

     form->itemNumManMod->setText(query.value(rec.indexOf("ID_I")).toString()); 
     form->purchaseManMod->setText(query.value(rec.indexOf("Purchase")).toString()); 
     form->saleManMod->setText(query.value(rec.indexOf("Sale")).toString()); 
     form->countityManMod->setText(query.value(rec.indexOf("Countity")).toString()); 
     form->totaleManMod->setText(query.value(rec.indexOf("Totale")).toString()); 
     form->minimumManMod->setText(query.value(rec.indexOf("Minimum")).toString()); 
     form->restManMod->setText(query.value(rec.indexOf("Rest")).toString()); 
     form->wsPriceManMod->setText(query.value(rec.indexOf("Vendor")).toString()); 
     form->wsNumManMod->setText(query.value(rec.indexOf("Min")).toString()); 
     QString x = idToCategory(3); 
     QMessageBox::critical(0, "dd", x); 
    } 
    else if(index == 2) 
    { 
     sqlQuery = "SELECT * FROM Items WHERE Name='" + item + "'"; 
     query.exec(sqlQuery); 
     query.next(); 
     rec = query.record(); 

     form->itemNumManDel->setText(query.value(rec.indexOf("ID_I")).toString()); 
     form->itemNameManDel->setText(query.value(rec.indexOf("Name")).toString()); 
     form->purchaseManDel->setText(query.value(rec.indexOf("Purchase")).toString()); 
     form->saleManDel->setText(query.value(rec.indexOf("Sale")).toString()); 
     form->countityManDel->setText(query.value(rec.indexOf("Countity")).toString()); 
     form->totaleManDel->setText(query.value(rec.indexOf("Totale")).toString()); 
     form->minimumManDel->setText(query.value(rec.indexOf("Minimum")).toString()); 
     form->restManDel->setText(query.value(rec.indexOf("Rest")).toString()); 
    } 
    else if(index == 0) 
    { 
     sqlQuery = "SELECT ID_I, Sale FROM Items WHERE Name='" + item + "'"; 
     query.exec(sqlQuery); 
     query.next(); 
     rec = query.record(); 
     form->numSaleAdd->setText(query.value(rec.indexOf("ID_I")).toString()); 
     form->priceSaleAdd->setText(query.value(rec.indexOf("Sale")).toString()); 
    } 
} 

QString Items::idToCategory(int id) 
{ 
    sqlQuery = "SELECT Name FROM Category WHERE ID_C=" + id; 
    query.exec(sqlQuery); 
    query.next(); 
    rec = query.record(); 
    QString name = query.value(rec.indexOf("Name")).toString(); 
    return query.lastQuery(); 
} 

当我打电话idToCategory()方法,它返回:

ECT Name FROM Items WHERE ID_C= 

但它应该返回是这样的:

SELECT Name FROM Items WHERE ID_C=3 

回答

2
sqlQuery = "SELECT Name FROM Category WHERE ID_C=" + id; 

您正在添加一个整数值指向一个指针。试试这个:

sqlQuery = QString("SELECT Name FROM Category WHERE ID_C=%1").arg(id); 

或者更好的,用事先准备好的声明,并绑定值:

sqlQuery = "SELECT Name FROM Category WHERE ID_C = :id"; 
query.prepare(sqlQuery); 
query.bindValue(":id", id); 
query.exec(); // note that you should be testing the return value of exec() 

PS:为了您的其他查询,你应该看看QDataWidgetMapperQSqlTableModel,映射一次并为每个小部件提供所有字段值,而不是手动重新分配值。

+0

这是'sqlQuery =“选择名称从类别WHERE ID_C =”+ QString :: number(id);' 也修复它。 – SIFE 2012-04-13 02:18:45