Problem z bazą danych



  • Cześć! Próbuję i próbuję i nie mogę dojść jak połączyć się z bazą danych. Doszedłem do tego na podstawie jednego z tutoriali:
    hh.pro
    @#-------------------------------------------------

    Project created by QtCreator 2013-12-01T18:42:56

    #-------------------------------------------------

    QT += core
    QT += sql
    QT -= gui

    TARGET = hh
    CONFIG += console
    CONFIG -= app_bundle

    TEMPLATE = app

    SOURCES += main.cpp
    @
    main.cpp
    @#include <QSqlDatabase>
    #include <QSqlQuery>
    #include <QDebug>
    #include <QString>

    int main(int argc, char *argv[])
    {
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("fd.sqlite");

        if (!db.open())
        {
                qDebug() << "Błąd: nie można się połączyć z bazą!";
        }
        else
        {
                qDebug() << "Nawiązano połączenie z bazą danych.";
    
                QSqlQuery dodawanie;
                dodawanie.exec&#40;"INSERT INTO test (imie, nazwisko, wiek&#41; VALUES ('Stefan', 'Kowalski', '20')");
                dodawanie.exec&#40;"INSERT INTO test (imie, nazwisko, wiek&#41; VALUES ('Jan', 'Nowak', '36')");
    
                QSqlQuery pobieranie;
                pobieranie.exec&#40;"SELECT * FROM test"&#41;;
    
                while (pobieranie.next())
                {
                        QString imie = pobieranie.value(1).toString();
                        QString nazwisko = pobieranie.value(2).toString();
                        int wiek = pobieranie.value(3).toInt();
                        qDebug() << imie << nazwisko << wiek;
                }
        }
    
        return 0;
    

    }
    @

    i ciągle dostaję, że połączenie z bazą jest, ale nie mogę wykonać na niej operacji i nie chce mi zwrócić imienia, ani nazwiska, wie ktoś co z tym zrobić?


  • Moderators

    Całe Qt zakłada, że istnieje Singleton QCoreApplication. Bez niego, pochodne QObject nie będą działały! Także na początek polecam dodanie na początku:
    @
    #include <QCoreApplication>
    // ..
    QCoreApplication app(argc, argv);
    @

    A na końcu:
    @
    return app.exec();
    @



  • ok dzięki, plik wygląda tak:

    @
    #include <QCoreApplication>
    #include <QSqlDatabase>
    #include <QSqlQuery>
    #include <QDebug>
    #include <QString>

    int main(int argc, char *argv[])
    {
    QCoreApplication app(argc, argv);
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("fgfgfd.sqlite");

        if (!db.open())
        {
                qDebug() << "Błąd: nie można się połączyć z bazą!";
        }
        else
        {
                qDebug() << "Nawiązano połączenie z bazą danych.";
    
                QSqlQuery dodawanie;
                dodawanie.exec&#40;"INSERT INTO test (imie, nazwisko, wiek&#41; VALUES ('Stefan', 'Kowalski', '20')");
                dodawanie.exec&#40;"INSERT INTO test (imie, nazwisko, wiek&#41; VALUES ('Jan', 'Nowak', '36')");
    
                QSqlQuery pobieranie;
                pobieranie.exec&#40;"SELECT * FROM test"&#41;;
    
                while (pobieranie.next())
                {
                        QString imie = pobieranie.value(1).toString();
                        QString nazwisko = pobieranie.value(2).toString();
                        int wiek = pobieranie.value(3).toInt();
                        qDebug() << imie << nazwisko << wiek;
                }
        }
    
        return app.exec();
    

    }
    @

    ale tak właściwie ciągle jednak jest źle, chyba muszę poszukać innego tutoriala



  • Stworzyłem kilka konsolowych aplikacji Qt4 i nie tworzyłem w nich instacji QCoreApplication.
    Tam gdzie używałem sqlite mam w setDatabaseName pełną ścieżkę do pliku bazy, czyli np. QDir::home().path() + dbName + ".sqlite" i działa.

    Acha... wartości pobierane z query liczymy od 0, więc imie to pobieranie.value(0), nazwisko (1), wiek (2).


Log in to reply