Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    Problem z bazą danych

    Polish
    3
    4
    1685
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      rwtryb last edited by

      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ć?

      1 Reply Last reply Reply Quote 0
      • sierdzio
        sierdzio Moderators last edited by

        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();
        @

        (Z(:^

        1 Reply Last reply Reply Quote 0
        • R
          rwtryb last edited by

          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

          1 Reply Last reply Reply Quote 0
          • C
            cezaryece last edited by

            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).

            1 Reply Last reply Reply Quote 0
            • First post
              Last post