2012-04-13 39 views
1

を遮断します:私はidToCategory()メソッドを呼び出すとき私の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(); 
} 

、それはこの返します

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:あなたの他のクエリのために、あなたは一度マッピングするために、QSqlTableModelQDataWidgetMapperをご覧ください値を手動で再割り当てするのではなく、すべてのフィールド値を各ウィジェットに追加します。

+0

これは 'sqlQuery =" SELECT ID FROMカテゴリWHERE ID_C = "+ QString :: number(id);' です。 – SIFE

関連する問題