poporacer
21st September 2010, 03:26
I am trying to create a main window and if a SQLite file doesn't exist, then create one. Then populate a combobox with data from a query. I am using QT Creator. I am learning and would like to know why I get the error and not just the correct code if that isn't too much to ask.
//database.h
//Database functions will go here
#ifndef DATABASE_H
#define DATABASE_H
class database
{
public:
database();
};
#endif // DATABASE_H
//MainWindow.h
#ifndef MXMAINWINDOW_H
#define MXMAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MXMainWindow;
}
class MXMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MXMainWindow(QWidget *parent = 0);
~MXMainWindow();
private:
Ui::MXMainWindow *ui;
};
#endif // MXMAINWINDOW_H
//database.cpp
#include "database.h"
#include <QtSql>
#include <QApplication>
#include <QtGui>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("rider.mt");
if (!db.open()) {
QMessageBox::warning(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
QSqlQuery dbquery;
dbquery.prepare ("CREATE TABLE Rider (firstname varchar(20))");
dbquery.exec();
dbquery.prepare("insert into Rider (firstname)Jeremy')");
dbquery.exec("insert into Rider values('Ricky', 'Charmichael')");
dbquery.exec("insert into Rider values('Chad', 'Reed')");
dbquery.next();
QString strTest=dbquery.value(0).toString();
QString strTest2= dbquery.value(1).toString();
return true;
}
//mainwindow.cpp
#include "mxmainwindow.h"
#include "ui_mxmainwindow.h"
#include <QtSql>
#include "database.h"
MXMainWindow::MXMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MXMainWindow)
{
ui->setupUi(this);
while (dbquery.next()) //Error here.. dbquery not declared in this scope
{
ui->cmbName->addItem(dbquery.value(0).toString());
}
}
MXMainWindow::~MXMainWindow()
{
delete ui;
}
//main.cpp
#include <QtGui/QApplication>
#include "mxmainwindow.h"
#include <QtSql>
#include <QtGui>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mxtrainer.dat");
if (!db.open()) {
QMessageBox::warning(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}
void createDb()
{
QSqlQuery query;
//query.exec("DROP TABLE scooter");
query.exec("CREATE TABLE rider ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(20) NOT NULL, "
"weight INTEGER NOT NULL, ");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('Villapoto', 155");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('Carmichael', 165");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('McGrath', 175");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
bool create = !QFile::exists("mxtrainer.dat");
if (!createConnection())
return 1;
if (create)
createDb();
MXMainWindow w;
w.show();
return a.exec();
}
I thought by including the header file of where the declaration is made it would provide the scope? What is the problem with this?
Thanks
//database.h
//Database functions will go here
#ifndef DATABASE_H
#define DATABASE_H
class database
{
public:
database();
};
#endif // DATABASE_H
//MainWindow.h
#ifndef MXMAINWINDOW_H
#define MXMAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MXMainWindow;
}
class MXMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MXMainWindow(QWidget *parent = 0);
~MXMainWindow();
private:
Ui::MXMainWindow *ui;
};
#endif // MXMAINWINDOW_H
//database.cpp
#include "database.h"
#include <QtSql>
#include <QApplication>
#include <QtGui>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("rider.mt");
if (!db.open()) {
QMessageBox::warning(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
QSqlQuery dbquery;
dbquery.prepare ("CREATE TABLE Rider (firstname varchar(20))");
dbquery.exec();
dbquery.prepare("insert into Rider (firstname)Jeremy')");
dbquery.exec("insert into Rider values('Ricky', 'Charmichael')");
dbquery.exec("insert into Rider values('Chad', 'Reed')");
dbquery.next();
QString strTest=dbquery.value(0).toString();
QString strTest2= dbquery.value(1).toString();
return true;
}
//mainwindow.cpp
#include "mxmainwindow.h"
#include "ui_mxmainwindow.h"
#include <QtSql>
#include "database.h"
MXMainWindow::MXMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MXMainWindow)
{
ui->setupUi(this);
while (dbquery.next()) //Error here.. dbquery not declared in this scope
{
ui->cmbName->addItem(dbquery.value(0).toString());
}
}
MXMainWindow::~MXMainWindow()
{
delete ui;
}
//main.cpp
#include <QtGui/QApplication>
#include "mxmainwindow.h"
#include <QtSql>
#include <QtGui>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mxtrainer.dat");
if (!db.open()) {
QMessageBox::warning(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}
void createDb()
{
QSqlQuery query;
//query.exec("DROP TABLE scooter");
query.exec("CREATE TABLE rider ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(20) NOT NULL, "
"weight INTEGER NOT NULL, ");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('Villapoto', 155");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('Carmichael', 165");
query.exec("INSERT INTO rider (name, weight) "
"VALUES ('McGrath', 175");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
bool create = !QFile::exists("mxtrainer.dat");
if (!createConnection())
return 1;
if (create)
createDb();
MXMainWindow w;
w.show();
return a.exec();
}
I thought by including the header file of where the declaration is made it would provide the scope? What is the problem with this?
Thanks