Results 1 to 5 of 5

Thread: Connecting SQLite databse with QT

  1. #1
    Join Date
    Apr 2013
    Posts
    5
    Thanks
    2
    Qt products
    Qt3 Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Symbian S60 Android Maemo/MeeGo

    Default Connecting SQLite databse with QT

    Hello Everyone!

    I am using QT5.0 I want to know how can I establish connection between the SQLite database and QT. Below is the code for my connection. I am using a in memory database as well but I want to connect a custom database.

    #include "browser.h"
    #include "qsqlconnectiondialog.h"

    #include <QtGui>
    #include <QtSql>

    Browser::Browser(QWidget *parent)
    : QWidget(parent)
    {
    setupUi(this);

    table->addAction(insertRowAction);
    table->addAction(deleteRowAction);

    if (QSqlDatabase::drivers().isEmpty())
    QMessageBox::information(this, tr("No database drivers found"),
    tr("This demo requires at least one Qt database driver. "
    "Please check the documentation how to build the "
    "Qt SQL plugins."));

    emit statusMessage(tr("Ready."));
    }

    Browser::~Browser()
    {
    }

    void Browser::exec()
    {
    QSqlQueryModel *model = new QSqlQueryModel(table);
    model->setQuery(QSqlQuery(sqlEdit->toPlainText(), connectionWidget->currentDatabase()));
    table->setModel(model);

    if (model->lastError().type() != QSqlError::NoError)
    emit statusMessage(model->lastError().text());
    else if (model->query().isSelect())
    emit statusMessage(tr("Query OK."));
    else
    emit statusMessage(tr("Query OK, number of affected rows: %1").arg(
    model->query().numRowsAffected()));

    updateActions();
    }

    QSqlError Browser::addConnection(const QString &driver, const QString &dbName, const QString &host,
    const QString &user, const QString &passwd, int port)
    {
    static int cCount = 0;

    QSqlError err;
    QSqlDatabase db = QSqlDatabase::addDatabase(driver, QString("Browser%1").arg(++cCount));
    db.setDatabaseName(dbName);
    db.setHostName(host);
    db.setPort(port);
    if (!db.open(user, passwd)) {
    err = db.lastError();
    db = QSqlDatabase();
    QSqlDatabase::removeDatabase(QString("Browser%1"). arg(cCount));
    }
    connectionWidget->refresh();

    return err;
    }

    void Browser::addConnection()
    {
    QSqlConnectionDialog dialog(this);
    if (dialog.exec() != QDialog::Accepted)
    return;

    if (dialog.useInMemoryDatabase()) {
    QSqlDatabase::database("in_mem_db", false).close();
    QSqlDatabase::removeDatabase("in_mem_db");
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db");
    db.setDatabaseName(":memory:");
    if (!db.open())
    QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
    "opening the connection: ") + db.lastError().text());
    QSqlQuery q("", db);
    q.exec("drop table Movies");
    q.exec("drop table Names");
    q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)");
    q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')");
    q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')");
    q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')");
    q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')");
    q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')");
    q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)");
    q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')");
    q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')");
    q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')");
    q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')");
    q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')");
    connectionWidget->refresh();
    } else {
    QSqlError err = addConnection(dialog.driverName(), dialog.databaseName(), dialog.hostName(),
    dialog.userName(), dialog.password(), dialog.port());
    if (err.type() != QSqlError::NoError)
    QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
    "opening the connection: ") + err.text());
    }
    }

    void Browser::showTable(const QString &t)
    {
    QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
    model->setEditStrategy(QSqlTableModel::OnRowChange);
    model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
    model->select();
    if (model->lastError().type() != QSqlError::NoError)
    emit statusMessage(model->lastError().text());
    table->setModel(model);
    table->setEditTriggers(QAbstractItemView:oubleClicked|QAbstractItemView::EditKeyPressed);

    connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)) ,
    this, SLOT(currentChanged()));
    updateActions();
    }

    void Browser::showMetaData(const QString &t)
    {
    QSqlRecord rec = connectionWidget->currentDatabase().record(t);
    QStandardItemModel *model = new QStandardItemModel(table);

    model->insertRows(0, rec.count());
    model->insertColumns(0, 7);

    model->setHeaderData(0, Qt::Horizontal, "Fieldname");
    model->setHeaderData(1, Qt::Horizontal, "Type");
    model->setHeaderData(2, Qt::Horizontal, "Length");
    model->setHeaderData(3, Qt::Horizontal, "Precision");
    model->setHeaderData(4, Qt::Horizontal, "Required");
    model->setHeaderData(5, Qt::Horizontal, "AutoValue");
    model->setHeaderData(6, Qt::Horizontal, "DefaultValue");

    for (int i = 0; i < rec.count(); ++i) {
    QSqlField fld = rec.field(i);
    model->setData(model->index(i, 0), fld.name());
    model->setData(model->index(i, 1), fld.typeID() == -1
    ? QString(QVariant::typeToName(fld.type()))
    : QString("%1 (%2)").arg(QVariant::typeToName(fld.type())).arg(f ld.typeID()));
    model->setData(model->index(i, 2), fld.length());
    model->setData(model->index(i, 3), fld.precision());
    model->setData(model->index(i, 4), fld.requiredStatus() == -1 ? QVariant("?")
    : QVariant(bool(fld.requiredStatus())));
    model->setData(model->index(i, 5), fld.isAutoValue());
    model->setData(model->index(i, 6), fld.defaultValue());
    }

    table->setModel(model);
    table->setEditTriggers(QAbstractItemView::NoEditTriggers );

    updateActions();
    }

    void Browser::insertRow()
    {
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
    if (!model)
    return;

    QModelIndex insertIndex = table->currentIndex();
    int row = insertIndex.row() == -1 ? 0 : insertIndex.row();
    model->insertRow(row);
    insertIndex = model->index(row, 0);
    table->setCurrentIndex(insertIndex);
    table->edit(insertIndex);
    }

    void Browser::deleteRow()
    {
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
    if (!model)
    return;

    model->setEditStrategy(QSqlTableModel::OnManualSubmit) ;

    QModelIndexList currentSelection = table->selectionModel()->selectedIndexes();
    for (int i = 0; i < currentSelection.count(); ++i) {
    if (currentSelection.at(i).column() != 0)
    continue;
    model->removeRow(currentSelection.at(i).row());
    }

    model->submitAll();
    model->setEditStrategy(QSqlTableModel::OnRowChange);

    updateActions();
    }

    void Browser::updateActions()
    {
    bool enableIns = qobject_cast<QSqlTableModel *>(table->model());
    bool enableDel = enableIns && table->currentIndex().isValid();

    insertRowAction->setEnabled(enableIns);
    deleteRowAction->setEnabled(enableDel);
    }

    void Browser::about()
    {
    QMessageBox::about(this, tr("About"), tr("The SQL Browser demonstration "
    "shows how a data browser can be used to visualize the results of SQL"
    "statements on a live database"));
    }

  2. #2
    Join Date
    Mar 2008
    Location
    Kraków, Poland
    Posts
    1,536
    Thanked 284 Times in 279 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Connecting SQLite databse with QT

    Your mail is unreadable. First put code in tag CODE, second say what is a problem ?

  3. #3
    Join Date
    Apr 2013
    Posts
    5
    Thanks
    2
    Qt products
    Qt3 Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Symbian S60 Android Maemo/MeeGo

    Default Re: Connecting SQLite databse with QT

    Here is the code. I can use the pre defined database but cannot connect an external SQLite databse saved somewhere in my computer.

    #include "browser.h"
    #include "qsqlconnectiondialog.h"

    #include <QtGui>
    #include <QtSql>

    Browser::Browser(QWidget *parent)
    : QWidget(parent)
    {
    setupUi(this);

    table->addAction(insertRowAction);
    table->addAction(deleteRowAction);

    if (QSqlDatabase::drivers().isEmpty())
    QMessageBox::information(this, tr("No database drivers found"),
    tr("This demo requires at least one Qt database driver. "
    "Please check the documentation how to build the "
    "Qt SQL plugins."));

    emit statusMessage(tr("Ready."));
    }

    Browser::~Browser()
    {
    }

    void Browser::exec()
    {
    QSqlQueryModel *model = new QSqlQueryModel(table);
    model->setQuery(QSqlQuery(sqlEdit->toPlainText(), connectionWidget->currentDatabase()));
    table->setModel(model);

    if (model->lastError().type() != QSqlError::NoError)
    emit statusMessage(model->lastError().text());
    else if (model->query().isSelect())
    emit statusMessage(tr("Query OK."));
    else
    emit statusMessage(tr("Query OK, number of affected rows: %1").arg(
    model->query().numRowsAffected()));

    updateActions();
    }

    QSqlError Browser::addConnection(const QString &driver, const QString &dbName, const QString &host,
    const QString &user, const QString &passwd, int port)
    {
    static int cCount = 0;

    QSqlError err;
    QSqlDatabase db = QSqlDatabase::addDatabase(driver, QString("Browser%1").arg(++cCount));
    db.setDatabaseName(dbName);
    db.setHostName(host);
    db.setPort(port);
    if (!db.open(user, passwd)) {
    err = db.lastError();
    db = QSqlDatabase();
    QSqlDatabase::removeDatabase(QString("Browser%1"). arg(cCount));
    }
    connectionWidget->refresh();

    return err;
    }

    void Browser::addConnection()
    {
    QSqlConnectionDialog dialog(this);
    if (dialog.exec() != QDialog::Accepted)
    return;

    if (dialog.useInMemoryDatabase()) {
    QSqlDatabase::database("in_mem_db", false).close();
    QSqlDatabase::removeDatabase("in_mem_db");
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db");
    db.setDatabaseName(":memory:");
    if (!db.open())
    QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
    "opening the connection: ") + db.lastError().text());
    QSqlQuery q("", db);
    q.exec("drop table Movies");
    q.exec("drop table Names");
    q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)");
    q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')");
    q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')");
    q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')");
    q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')");
    q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')");
    q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)");
    q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')");
    q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')");
    q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')");
    q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')");
    q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')");
    connectionWidget->refresh();
    } else {
    QSqlError err = addConnection(dialog.driverName(), dialog.databaseName(), dialog.hostName(),
    dialog.userName(), dialog.password(), dialog.port());
    if (err.type() != QSqlError::NoError)
    QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
    "opening the connection: ") + err.text());
    }
    }

    void Browser::showTable(const QString &t)
    {
    QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
    model->setEditStrategy(QSqlTableModel::OnRowChange);
    model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
    model->select();
    if (model->lastError().type() != QSqlError::NoError)
    emit statusMessage(model->lastError().text());
    table->setModel(model);
    table->setEditTriggers(QAbstractItemViewubleClicked|QAbstractItemView::EditKeyPressed);

    connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)) ,
    this, SLOT(currentChanged()));
    updateActions();
    }

    void Browser::showMetaData(const QString &t)
    {
    QSqlRecord rec = connectionWidget->currentDatabase().record(t);
    QStandardItemModel *model = new QStandardItemModel(table);

    model->insertRows(0, rec.count());
    model->insertColumns(0, 7);

    model->setHeaderData(0, Qt::Horizontal, "Fieldname");
    model->setHeaderData(1, Qt::Horizontal, "Type");
    model->setHeaderData(2, Qt::Horizontal, "Length");
    model->setHeaderData(3, Qt::Horizontal, "Precision");
    model->setHeaderData(4, Qt::Horizontal, "Required");
    model->setHeaderData(5, Qt::Horizontal, "AutoValue");
    model->setHeaderData(6, Qt::Horizontal, "DefaultValue");

    for (int i = 0; i < rec.count(); ++i) {
    QSqlField fld = rec.field(i);
    model->setData(model->index(i, 0), fld.name());
    model->setData(model->index(i, 1), fld.typeID() == -1
    ? QString(QVariant::typeToName(fld.type()))
    : QString("%1 (%2)").arg(QVariant::typeToName(fld.type())).arg(f ld.typeID()));
    model->setData(model->index(i, 2), fld.length());
    model->setData(model->index(i, 3), fld.precision());
    model->setData(model->index(i, 4), fld.requiredStatus() == -1 ? QVariant("?")
    : QVariant(bool(fld.requiredStatus())));
    model->setData(model->index(i, 5), fld.isAutoValue());
    model->setData(model->index(i, 6), fld.defaultValue());
    }

    table->setModel(model);
    table->setEditTriggers(QAbstractItemView::NoEditTrigge rs );

    updateActions();
    }

    void Browser::insertRow()
    {
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
    if (!model)
    return;

    QModelIndex insertIndex = table->currentIndex();
    int row = insertIndex.row() == -1 ? 0 : insertIndex.row();
    model->insertRow(row);
    insertIndex = model->index(row, 0);
    table->setCurrentIndex(insertIndex);
    table->edit(insertIndex);
    }

    void Browser::deleteRow()
    {
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
    if (!model)
    return;

    model->setEditStrategy(QSqlTableModel::OnManualSubmit) ;

    QModelIndexList currentSelection = table->selectionModel()->selectedIndexes();
    for (int i = 0; i < currentSelection.count(); ++i) {
    if (currentSelection.at(i).column() != 0)
    continue;
    model->removeRow(currentSelection.at(i).row());
    }

    model->submitAll();
    model->setEditStrategy(QSqlTableModel::OnRowChange);

    updateActions();
    }

    void Browser::updateActions()
    {
    bool enableIns = qobject_cast<QSqlTableModel *>(table->model());
    bool enableDel = enableIns && table->currentIndex().isValid();

    insertRowAction->setEnabled(enableIns);
    deleteRowAction->setEnabled(enableDel);
    }

    void Browser::about()
    {
    QMessageBox::about(this, tr("About"), tr("The SQL Browser demonstration "
    "shows how a data browser can be used to visualize the results of SQL"
    "statements on a live database"));
    }

  4. #4
    Join Date
    Mar 2008
    Location
    Kraków, Poland
    Posts
    1,536
    Thanked 284 Times in 279 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Connecting SQLite databse with QT

    As db name You must put full path to Your db file.

  5. The following user says thank you to Lesiok for this useful post:

    rushanbashir (11th April 2013)

  6. #5
    Join Date
    Apr 2013
    Posts
    5
    Thanks
    2
    Qt products
    Qt3 Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Symbian S60 Android Maemo/MeeGo

    Default Re: Connecting SQLite databse with QT

    Thank You So much :-)
    Database has been connected successfully :-)

Similar Threads

  1. QtSQL and databse
    By prophet0 in forum Qt Programming
    Replies: 2
    Last Post: 18th December 2011, 06:22
  2. adding image into a databse using sqlite
    By pankaj.1426 in forum Qt for Embedded and Mobile
    Replies: 0
    Last Post: 20th October 2010, 10:08
  3. link the content og a QComboBox to a databse table
    By graciano in forum Qt Programming
    Replies: 2
    Last Post: 16th June 2010, 21:08
  4. Need info about databse in qt4
    By newtowindows in forum Installation and Deployment
    Replies: 1
    Last Post: 28th October 2009, 14:42
  5. Stored Procedure in Firebird databse (IBase)
    By Specialized1 in forum Qt Programming
    Replies: 2
    Last Post: 15th September 2009, 09:47

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.