SIFE
17th March 2012, 21:46
I have this class:
#include <QSqlError>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include "itemsell.h"
#include "ui_ItemSell.h"
#include "sales.h"
ItemSell::ItemSell(QWidget *parent) :
QDialog(parent),
ui(new Ui::ItemSell)
{
ui->setupUi(this);
}
void ItemSell::errorLog(QString error)
{
QFile log("errors.log");
log.open(QFile::Append | QFile::Text);
QTextStream out(&log);
out << error;
log.close();
}
void ItemSell::getSale(const int& id)
{
sqlQuery = "SELECT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales "
"JOIN Items ON Sales.ID_I = Items.ID_I "
"WHERE Sales.ID_S=" + id;
if(!query.exec(sqlQuery))
{
error = "[" + query.lastError().text() + "]\t[" + query.lastQuery() + "]\t[" + QDate::currentDate().toString("yyyy-MM-dd") + "\t" +QTime::currentTime().toString("hh-mm") + "]\n";
this->errorLog(error);
}
query.next();
rec = query.record();
ui->itemMat->setText(query.value(rec.indexOf("ID_I")).toString());
ui->nameSale->setText(query.value(rec.indexOf("Name")).toString());
ui->dateSale->setDate(query.value(rec.indexOf("Day")).toDate());
ui->priceSale->setText(query.value(rec.indexOf("Price")).toString());
ui->countitySale->setText(query.value(rec.indexOf("Scoun")).toString());
ui->totaleSale->setText(query.value(rec.indexOf("Stotale")).toString());
QMessageBox sd;
sd.setText(query.lastQuery() + "*** " + query.lastError().text());
sd.exec();
}
ItemSell::~ItemSell()
{
delete ui;
}
And I have this slot executed when the user click on action menu:
void Store::showItem()
{
int id = ui->lstSells->model()->index(m_ind.row(), 0).data().toInt();
ItemSell *item = new ItemSell(this);
item->getSale(id);
item->exec();
}
My problem is the query is never executed because an SQL error statement, it is always executed like this:
CT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1
Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1
While it should be like this:
SELECT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1
#include <QSqlError>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include "itemsell.h"
#include "ui_ItemSell.h"
#include "sales.h"
ItemSell::ItemSell(QWidget *parent) :
QDialog(parent),
ui(new Ui::ItemSell)
{
ui->setupUi(this);
}
void ItemSell::errorLog(QString error)
{
QFile log("errors.log");
log.open(QFile::Append | QFile::Text);
QTextStream out(&log);
out << error;
log.close();
}
void ItemSell::getSale(const int& id)
{
sqlQuery = "SELECT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales "
"JOIN Items ON Sales.ID_I = Items.ID_I "
"WHERE Sales.ID_S=" + id;
if(!query.exec(sqlQuery))
{
error = "[" + query.lastError().text() + "]\t[" + query.lastQuery() + "]\t[" + QDate::currentDate().toString("yyyy-MM-dd") + "\t" +QTime::currentTime().toString("hh-mm") + "]\n";
this->errorLog(error);
}
query.next();
rec = query.record();
ui->itemMat->setText(query.value(rec.indexOf("ID_I")).toString());
ui->nameSale->setText(query.value(rec.indexOf("Name")).toString());
ui->dateSale->setDate(query.value(rec.indexOf("Day")).toDate());
ui->priceSale->setText(query.value(rec.indexOf("Price")).toString());
ui->countitySale->setText(query.value(rec.indexOf("Scoun")).toString());
ui->totaleSale->setText(query.value(rec.indexOf("Stotale")).toString());
QMessageBox sd;
sd.setText(query.lastQuery() + "*** " + query.lastError().text());
sd.exec();
}
ItemSell::~ItemSell()
{
delete ui;
}
And I have this slot executed when the user click on action menu:
void Store::showItem()
{
int id = ui->lstSells->model()->index(m_ind.row(), 0).data().toInt();
ItemSell *item = new ItemSell(this);
item->getSale(id);
item->exec();
}
My problem is the query is never executed because an SQL error statement, it is always executed like this:
CT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1
Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1
While it should be like this:
SELECT Sales.Countity as Scoun, Sales.Totale as Stotale FROM Sales JOIN Items ON Sales.ID_I = Items.ID_I WHERE Sales.ID_S=1