Brak sterownika MySQL – konsolowy kod prawidłowo łączy z bazą, okienkowy nie

0

Witam
Mam drobny problem z połączenie z bazą danych mysql. Samo łączenie napisałem w aplikacji konsolowej i działa idealnie. pobiera dane wypisuje itp. Natomiast to samo łączenie z bazą danych lecz w aplikacji okienkowej wypisuje mi że jest brak sterownika.

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QIBASE QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 QTDS QTDS7

Dlaczego się tak dzieje że to samo łączenie z bazą danych w konsoli działa lecz jak już zaimplementuje je w okienka nie działa??
działający kod konsoli:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("");
    db.setDatabaseName("");
    db.setUserName("");
    db.setPassword("");

kod okienkowy:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("");
    db.setDatabaseName("");
    db.setUserName("");
    db.setPassword("");

Dlaczego się tak dzieje ?

0

Zakładam, że windows? Jeśli tak, to użyj windeployqt, albo odpal program okienkowy z konsoli. Strzelam, że bez ścieżek Qt nie widzi drivera MySQL, a konsolowy odpalasz z konsoli Qt i wtedy je widzi.

0

No właśnie nie. Pracuję na Linuxie. Odpalałem oby dwa projekty prosto z IDE jak i spod samej konsoli. Wszędzie to samo. Aplikacja konsolowa działa a okienkowa już nie.

0

To faktycznie dziwne. CONFIG += sql w pliku .pro jest?

0

Tak nie zapomniałem o tym.
.pro

QT += core gui
QT += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = lotto
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \
        main.cpp \
        mainwindow.cpp \
    dodaj.cpp

HEADERS += \
        mainwindow.h \
    dodaj.h

FORMS += \
        mainwindow.ui \
    dodaj.ui

Dodam że aplikacja konsolowa na początku tez nie działała. Ściągnąłem sterownik z tej stronki: https://dev.mysql.com/downloads/connector/c/
Jako Linux - Generic w wersji x64. Rozpakowałem w katalogach QT i aplikacja konsolowa zadziałała. Więc zacząłem pisać okienka i moje zdziwienie że łączenie z bazą działa w konsoli a w okienkach już nie.

0

Dopisałem dla pewności w okienku informację co się dokładnie dzieje. I faktycznie nie ma sterownika :( ale dlaczego ?? Dodam że uruchamiam spod qtcreatora i spod konsoli i ten sam efekt.

QMessageBox box;
        box.setText("błąd : "+db.lastError().text());
        box.exec();

I dostaje :

błąd : Driver not loaded Driver not loaded
0

Ta sama wersja Qt? Qt instalowane z paczek systemowych czy downloadera Qt? Prawie na pewno coś ze ścieżkami, ale ciężko mi zgadywać

0

a próbowałeś przez QODBC?

0

Przedwczoraj instalowałem QT poprzez instalator online ściągnięty z oficjalnej stronki. Jak dobrze pamiętam jest to wersja 5.10.
Nie próbowałem z QODBC bo większość kodu mam pod QMYSQL napisane. Dwa nie chcę od problemu uciekać tylko go rozwiązać. W przyszłości pewnie i tak bym musiał zrobić coś z QMYSQL i problem by wrócił niestety.

0

Porównywałeś co zwraca QCoreApplication::libraryPaths() w aplikacji konsolowej i okienkowej?

0

Zadałem sobie trud i od nowa utworzyłem projekt w QT. Przekopiowałem kod i uruchomiłem. O dziwo program połączył się z bazą danych a bynajmniej tak pisze.
Podczas tworzenia projektu podczas wyboru zestawu narzędzi mam do wyboru Desktop i Desktop QT 5.10.1 GCC 64 bit.
Gdy utworzę projekt na zwykłym desktopie łączenie nie działa lecz gdy je utworzę na desktop 64 bit wszytko działa poprawnie. Dlaczego się tak dzieje ?

0

A robiłeś od tego czasu pełny rebuild? Taki, żeby qmake od nowa utworzyło makefiles?

0

Tak robiłem. To jest kwestia utworzonego projektu i nie wiem dlaczego. Zauważyłem to i poprawiłem poprzedni wpis. Tam to opisałem.

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