Obsługa, sterowniki MYSQL w QT

0

Witam.

Zacznę banalnie. Mam problem z zainstalowaniem sterowników do MYSQL w QT. Posiadam QT SDK 1.2.1 je rozszerzam o bazę 4.8.1 , ale w info o prog. podaje 4.7.4 . Pewnie od razu powiecie były tematy z tym problemem i tu was zaszachuje. Bo znam już na pamięć te:

http://4programmers.net/Forum/Bazy_danych/200610-qt_+_mysql_brak_polaczenia_z_baza_danych

http://4programmers.net/Forum/C_i_C++/175606-qt_+_mysql?p=735819#id735819

http://ieatbinary.com/2011/07/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/

http://qt-project.org/doc/qt-4.8/sql-driver.html

i jeszcze pare innych. komendy normalnie już wbijam z pamięci.

Teraz co się dzieje

Ad1. Ad2.
Matek3005 na pierwszej stronie podaje co zrobić no to to robię. Idzie do momentu kiedy trzeba zrobić configure. Konfiguracja zatrzymuje się na pozycji w której kompilator mnie informuje, że nie ma jakiejś pierdoły odnośnie PERL ?:|
Jeśli mimo to wpisze migw32-make to wyskakuje błąd "no rule to make target"
Po wpisaniu komendy bliźniaczej ze strony qtcenter

configure.exe -debug-and-release -platform win32-g++ -qt-sql-mysql 
-l mysql -I C:\MySQL\MySQL51\include -L C:\MySQL\MySQL51\lib\opt

Sprawa wygląda poważniej, jakby coś się działo coś dobrego. Myślałem, że już złapałem Pana Boga za nogi, ale po wpisaniu
mingw32-make sub-src
Bóg mnie opuszcza i wyskakuje także błąd "no rule make target" :(

Ad3
wszystko się kompiluje, pliki się generują, ale echo nic nie działa. Wszystko przekopiowane tam gdzie powinno i riba.

Ad4.
To powiązanie między tymi dwoma metodami, chciałem pokazać, że tam też mnie widziano.

Proszę o pomoc, pomysły, siedzę nad tym kilka dni i jeszcze trochę i dostane chyba wylewu z nerwów...Jeszcze nigdy nie miałem tyle problemów z instalacją czegokolwiek odkądkolwiek pamiętam.
PS zacznijmy od zera. tzn zainstalowane mam
QT SDK 1.2.1
QT CREATOR 2.4.1 (pochodzi z up z SDK)
Baza 4.7.4 a zainstalowane 4.8.1 ( to w sumie chyba najnowszy zestaw SDK na dziś)
MinGW-5.1.6
server MYSQL 5.1

zmienne systemowe PATH dodane na katalog
MinWig\bin oraz katalog
....qtsource\minwig
.....qtsource\4.8.1

Co teraz proponujecie. Jakie komendy, jaki sposób itd.

0
  1. Qt

  2. "no rule to make target"

oznacza że nie w aktualnym katalogu nie ma pliku, który chcesz skompilować.

  1. QSqlError sprawdzałeś?

  2. Nie pokazuj żadnego kodu, to nawet tą komendę niepotrzebnie podałeś. Sami powinniśmy wiedzieć co masz źle.

0

Nie nie sprawdzałem QsqlError, ale sprawdzę gdy coś zainstaluje. Nie pokazuje żadnego kodu ponieważ tyle tego było, że sam nie wiem co pokazać. Dodatkowo mieszałem te sposoby jeden z drugim, więc byłaby totalna dezinformacja. Teraz mam zainstalowane wszystko na świeżo i tak chciałem podejść do tematu razem z wami. Wiem, że bez raportu o błędach z konsoli czy programu to wróżenie z fusów. Na początku chciałem przedstawić jakich metod próbowałem, co już wiem, co wstępnie się działo i jakim oprogramowaniem dysponuje.
Może tak - skupmy się na jednym wybranym przez Ciebie sposobie instalacji sterownika. Zatem, proszę Cię o podanie sposobu (np jeden z powyższych linków), którego miałbym użyć, a wszystko po kolei będę tutaj pisał i wklejał co się dzieje. Dodam, że w kodzie programu, sprawdzam, czy sterownik został zainstalowany tym sposobem:

qDebug() << QSqlDatabase :: drivers();

na razie dostaje (co oczywiste).
("QSQLITE", "QODBC3", "QODBC")

Znaczenie zwrotu "no target rule" znam tylko nie wiem jak do tego się ustosunkować, skoro wszystko wpisuje jak trzeba.

0

Sprawdź raczej czy jesteś w stanie zrobić coś takiego (dobrze byłoby jakbyś to zrobił w testach jednostkowych...):

    database =  QSqlDatabase::addDatabase(DRIVER, NAZWA);
    //reszta kodu
    database.open();

    query = QSqlQuery(database);

    if (database.tables().contains(JAKAS TABELA)) {
        query.exec(SELECT ALBO INSERT ALBO OBA DO TEJ TABELI);
    }else{
        query.exec(CREATE TABLE);
    }

    query.finish();

    MIEJSCE NA DEBUG

Dostosuj to oczywiście do swojego kodu, to wycinek z paru miejsc moich programów.

0

No więc tak:
Tako oto kod wrzuciłem do main(). Program się kompulije oczywiście bez połączenia z bazą. Kod uszczupliłem o linie zapytania. Jest to próba połaczenia się z bazą na darmowym serwerze cba.pl. Serwer zamierzam później wykorzystać, więc wybaczcie, ale hasło i nazwa zostały zamaskowane.

 QString error;
    QSqlError * lala = new QSqlError();
    error = lala->driverText();


    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

       db.setHostName("mysql.cba.pl");
       db.setDatabaseName("doradcynoma_cba_pl");
       db.setUserName("****");
       db.setPassword("****");

       if (!db.open())
       {
          qDebug() << "Błąd: nie można się połączyć z bazą!";
       }
       else
       {
          qDebug() << "Nawiązano połączenie z bazą danych.";
       }

       qDebug() << QSqlDatabase::drivers();
       qDebug() << error ;

A to otrzymuje w debug.

Uruchamianie C:\Users\Rafal\Desktop\raport\nienazwany-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\debug\nienazwany.exe...
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
BA?Ä?d: nie moA1na siÄ? poA?Ä?czyÄ? z bazÄ?! 
("QSQLITE", "QODBC3", "QODBC") 
"" 
0

Może nie mieć znaczenia ale brakuje mi informacji o systemie operacyjnym i wersji mysql tzn. Windows 7 32/64 bit? Tak samo dokładna wersja mysql 32/64 bit?

0

Windows 7 32bit service pack 1
MYSQL mysql-5.1.35-win32 (wydawca AB)

Jeśli trzeba coś doinstalować przeinstalować to nie ma problemu :)

0

No fajnie... mogłeś zacząć od tego, że bazę masz na zewnętrznym serwerze baz danych i ten serwer nie należy do Ciebie ;)
http://www.cba.pl/forum/viewtopic.php?p=111981&sid=21bc0494b4604f7488c9d6d2cb176a08#p111981
do baz danych cba.pl połączysz się tylko uruchamiając kod na ich wewnętrznym serwerze.
Postaw sobie bazę danych na localhost zamiast na cba i zacznie działać.

0

No w porządku, ale to nie zmienia chyba faktu, że potrzebuje działających sterowników w QT ?

EDIT:
To jeszcze pytanie uzupełniające. Jakie darmowy serwer umożliwi mi połączenie, które zamierzam wykonać, tzn. program na moim komputerze, a baza na obcym serwerze.

0

Nie liczysz, że to będzie wydajna baza z responsywnością poniżej 2sek prawda?
Sprawdź sobie działanie na lokalnej bazie zanim zaczniesz używać zewnętrznych.
http://www.db4free.net/
http://www.freemysql.net/

0

Nie nie liczę. Korzystać z tej bazy będzie jedna osoba i to raptem może z 2x dziennie, więc myślę, że będzie wystarczająco. Dzięki za linki rozeznam sprawę.
Zatem zacznę od prób na własnym serwerze , później pójdziemy o krok dalej na serwer zewnętrzny.
Mamy już wyjaśniony poligon doświadczalny, teraz zostaje kwestia instalacji tych nieszczęsnych sterowników, więc dalej czekam na wasze instrukcje co po kolei robić.

0
  1. Doinstaluj sobie jeśli jeszcze tego nie zrobiłeś źródła Qt 4.8.1 za pomocą "Maintain Qt SDK" oraz Mysql nagłówki i biblioteki do C/C++ - będziesz potrzebował katalogi (zawartości) lib oraz include.
  2. Gdy to poinstalujesz skorzystaj z konsoli qt(mingw) "Qt for desktop(mingw)", przejdź w nim do katalogu ze źródłami sterownika ("cd X:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql")
  3. Dodaj do pliku projektu ścieżki do "include" i "lib/libmysql.lib" z mysql ('qmake "INCLUDEPATH+=x:/[sciezka do mysql]/include" "LIBS+=x:/[sciezka do mysql]/lib/libmysql.lib" -o Makefile mysql.pro') i wykonaj mingw32-make
  4. następnie to samo tylko dla release - ('qmake "INCLUDEPATH+=x:/[sciezka do mysql]/include" "LIBS+=x:/[sciezka do mysql]/lib/libmysql.lib" -o Makefile mysql.pro "CONFIG+=release" ') i mingw32-make
    5, Po kompilacji w katalogach debug i release znajdziesz po dwa pliki: w debug: libqsqlmysqld4.a i qsqlmysqld4.dll oraz analogicznie w release: libqsqlmysql4.a i qsqlmysql4.dll - przekopiuj je do "X:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers" i najlepiej libmysql.dll (z katalogu mysql) do folderu systemowego (x:\windows...)
  5. Już powinno wszystko śmigać. Stwórz projekt i dodaj w pliku pro "qt += sql" i powinieneś mieć możliwość obsługi mysql'a. (qDebug() << QSqlDatabase::drivers()) powinno zwrócić ci między innymi "QMYSQL".

pozdrawiam.

Edit: teraz tak patrzę i ta metoda jest opisana również w trzecim linku wrzuconym przez Ciebie. Napisałeś, że pomimo kompilacji i dll'ek i przerzuceniu ich tam gdzie trza nic się nie dzieje. Co to znaczy? Qt wskazuje ci chociaż ten sterownik QMYSQL czy nie? Poza tym przy odpalonym projekcie w menu projektu (na lewej belce) masz jaką konfigurację budowania ustawioną - powinieneś mieć "Qt 4.8.1 for Desktop" bo pod tą wersję kompilujesz sterownik tak? Musi to być błąd z ustawieniem projektu bo skoro sterownik ci się kompiluje to nie widzę innego powodu jego nie wykrywania jak błędna konfiguracja budowania.

0

k###### Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesst działa !!!!!!!!!!!!!
Co było kluczem ? Moje przeoczenie w kopiowaniu plików, konkretnie 4 wygenerowane pliki przez wyżej wspomniane komendy kopiowałem do :
C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers

a powinno być!

C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers

Zauważcie, że końcówka tzn dwa ostatnie foldery są takie same, ale reszta...W całej rozpaczy i złości popełniałem ten sam błąd. Cóż mogę napisać - moje roztargnienie, podejście do sprawy z emocjami i zrodził się problematyczny efekt.

Chciałem wam serdecznie podziękować za pomoc, za poświęcony mi czas i uwagę. Pomyśleć, że straciłem tyle dni przez swoją niedokładność.
Ku woli ścisłości u mnie zadziałała metoda podana przez matek3005. Tą metodę znajdziecie również pod linkiem:

http://ieatbinary.com/2011/07/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/

Mogę dodać jedynie, że ja musiałem użyć w dostępie do katalogów podwójnego \ czyli komendy wyglądały tak:
qmake C:\\MYSQL\\include

To wszystko. Problem uważam za rozwiązany, jeszcze raz dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1