2012-04-13 18 views
1

ich diese Klasse haben:My SQL-Abfrage wird abgeschnitten

#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(); 
} 

Als ich idToCategory() Methode aufrufen, gibt es das:

ECT Name FROM Items WHERE ID_C= 

Aber es sollte wie folgt zurück:

SELECT Name FROM Items WHERE ID_C=3 

Antwort

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

Sie fügen eine Ganzzahl hinzu Wert für einen Zeiger. Versuchen Sie stattdessen:

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

Oder besser, eine vorbereitete Anweisung verwenden und binden den Wert:

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: Für Ihre weiteren Fragen Sie bei QDataWidgetMapper mit einem QSqlTableModel aussehen sollte, kartieren einmal und für alle Feldwerte für jedes Widget, anstatt den Wert manuell neu zuzuweisen.

+0

Dies ist 'sqlQuery =" SELECT-Name aus der Kategorie WHERE ID_C = "+ QString :: Nummer (id);' beheben Sie es auch. – SIFE