[QT]Błąd połączenia z bazą SQL

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Atom
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 08 mar 2009, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[QT]Błąd połączenia z bazą SQL

Post autor: Atom »

W moim programie jest wymagana baza danych zazwyczaj robiłem ją na strukturze lecz tym razem musi ona być złożona dlatego wybór padł na SQL. Już podczas połączenia z bazą danych wystąpił problem. Wykonuje zgodnie z tym jak jest w tutorialu z QT.
Dodałem dodatkowy wpis do pliku .pro jak wyczytałem z tutoriala.

Kod: Zaznacz cały

QT       += core gui
         += sql
I następnie przystąpiłem do wykonywania połączenia. Lecz już przy pierwszej linii kodu:

Kod: Zaznacz cały

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
dostaje takie oto błedy:

Kod: Zaznacz cały

 error: undefined reference to `QSqlDatabase::defaultConnection'
error: undefined reference to `QSqlDatabase::addDatabase(QString const&, QString const&)'
error: undefined reference to `QSqlDatabase::~QSqlDatabase()'
error: undefined reference to `QSqlDatabase::~QSqlDatabase()'
error: undefined reference to `QSqlDatabase::~QSqlDatabase()'
error: collect2: ld returned 1 exit status
Co robię źle że nawet przykładowe zadania z wielu tutoriali przynoszą takie same błędy ?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [QT]Problem z bazą danych SQL

Post autor: kabanek »

nie wiem czy to może być błąd, czy nie, ale spróbuj może tak

Kod: Zaznacz cały

QT       += core gui sql
bo ten błąd oznacza, że nie została zlinkowana biblioteka sql
Awatar użytkownika
Atom
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 08 mar 2009, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: Atom »

Niestety kabanek poprawienie tego wpisu nie ma żadnego efektu. Nadal dostaje te same błędy. Dodam jeszcze biblioteki które dołączyłem do projektu może nie odpowiednie implementuje:

Kod: Zaznacz cały

#include <QtSql/QSqlDatabase>
#include <QtSql/qsql_sqlite.h>
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: kabanek »

1. to spróbuj bez przedrostka QtSql/, czyli np

Kod: Zaznacz cały

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
itp

2. a działa Ci przykład do Qt?
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: mikolajs »

Ten błąd to błąd linkera, więc nie widzi biblioteki a nie plików nagłówkowych.

Kod: Zaznacz cały

QT       += core gui 
ten wpis jest zbędny core i gui będą użyte automatycznie bez tego. Ogranicz się do QT += sql
Możesz też otworzyć Makefile i zobaczyć czy w zmiennej LIBS jest dodana biblioteka QtSql
Awatar użytkownika
Atom
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 08 mar 2009, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: Atom »

kabanek jednak miałeś racje. Instynktownie dałem średnik na końcu linii. Wszystko ładnie teraz ruszyło :) lecz przy zamykaniu całkowicie programu dostaje taki błąd :

Kod: Zaznacz cały

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
Program nieoczekiwanie przerwał pracę.
W czym jest problem ?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: kabanek »

widocznie przed zamknięciem programu nie zakończyłeś połączenia z bazą
connection 'qt_sql_default_connection' is still in use
na to wskazuje
Awatar użytkownika
Atom
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 08 mar 2009, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: Atom »

Właśnie zakończyłem komendą db.close();
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: kabanek »

hmm... to może jakieś zapytanie się wtedy wykonuje.

No nie wiem... może pokaż trochę kodu
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: mikolajs »

Zamknięcie bazy musi odbyć się w innym zasięgu niż tam gdzie są zapytania. I usuwaj bazę metodą statyczną removeDatabase, Samo close zamknie tylko konkretny alias do bazy (połączenia z bazą są statyczne) i powiązane zasoby. Zazwyczaj robię tak, że w konstruktorze tworzę bazę, a w destruktorze usuwam. Zobacz: http://doc.trolltech.com/4.7/qsqldataba ... veDatabase
Awatar użytkownika
Atom
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 08 mar 2009, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: Atom »

mikolajs sposób zadziałał :) dziękuję bardzo. Lecz teraz może się to wydać śmieszne leszcz mam problem z wpisaniem pozycji do bazy danych a raczej informacji które wpisuje do lineedit. Jeżeli wykonuje na sztywno zapytanie SQL ładnie wszyto się spisuje. W php w zapytaniu wystarczy dać $zmienna a jak jest w QT ? Jak wpisywać do bazy danych informację np. z linednit ?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: kabanek »

nie, ale możesz przecież zrobić coś w stylu:
"zapytanie " + ui->lineedit.text() + " dalsza część zapytania";

poszukaj w pomocy do Qt, chyba widziałem tam ładniejsze rozwiązanie tego problemu
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [QT]Błąd połączenia z bazą SQL

Post autor: mikolajs »

Tak jest ładniejsze rozwiązanie :)
metody

Kod: Zaznacz cały

QSqlQuery::prepare  
i potem

Kod: Zaznacz cały

bindValue
Zobacz w dokumentacji.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości