Strona 1 z 1
[QT]Błąd połączenia z bazą SQL
: 25 wrz 2010, 12:35
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.
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 ?
Odp: [QT]Problem z bazą danych SQL
: 25 wrz 2010, 13:03
autor: kabanek
nie wiem czy to może być błąd, czy nie, ale spróbuj może tak
bo ten błąd oznacza, że nie została zlinkowana biblioteka sql
Odp: [QT]Błąd połączenia z bazą SQL
: 25 wrz 2010, 14:13
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>
Odp: [QT]Błąd połączenia z bazą SQL
: 25 wrz 2010, 15:27
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?
Odp: [QT]Błąd połączenia z bazą SQL
: 25 wrz 2010, 20:06
autor: mikolajs
Ten błąd to błąd linkera, więc nie widzi biblioteki a nie plików nagłówkowych.
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
Odp: [QT]Błąd połączenia z bazą SQL
: 26 wrz 2010, 15:13
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 ?
Odp: [QT]Błąd połączenia z bazą SQL
: 26 wrz 2010, 15:46
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
Odp: [QT]Błąd połączenia z bazą SQL
: 26 wrz 2010, 17:22
autor: Atom
Właśnie zakończyłem komendą db.close();
Odp: [QT]Błąd połączenia z bazą SQL
: 26 wrz 2010, 21:23
autor: kabanek
hmm... to może jakieś zapytanie się wtedy wykonuje.
No nie wiem... może pokaż trochę kodu
Odp: [QT]Błąd połączenia z bazą SQL
: 27 wrz 2010, 18:26
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
Odp: [QT]Błąd połączenia z bazą SQL
: 30 wrz 2010, 14:20
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 ?
Odp: [QT]Błąd połączenia z bazą SQL
: 30 wrz 2010, 15:01
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
Odp: [QT]Błąd połączenia z bazą SQL
: 01 paź 2010, 19:47
autor: mikolajs
Tak jest ładniejsze rozwiązanie

metody
i potem
Zobacz w dokumentacji.