Nie ładują mi się sterowniki QODBC w QT.

0

Witam,

chcę się połączyć z bazą danych, jednak gdy kompiluję program wyskakuje mi:

QSqlDatabase: QODBC driver not loaded

QSqlDatabase: avaiable drivers: QSQLITE

Error = QSqlError(-1, "Driver not loaded", "Driver not loaded")

Znalazłem, że trzeba zrobić tak w konsoli:

w lokazlizacji: qt\src\plugins\sqldrivers\odbc

qmake odbc.pro

nmake

zrobiłem tak i nic

aha jak dałem nmake to wyskoczył:

Microsoft (r) ...
Copyright (c) ...

NMAKE -f Makefile.Debug

Microsoft (r) ...
Copyright (c) ...

Makefile.Debug(58) : fatal error U1088: invalid separator '::' on interence rule

Stop.
NMAKE : fatal error U1077: 'C:\Windows\system32\cmd.exe' :return code '0x2'
Stop.

kod:

#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QtDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString serverName = "LOCALHOST\\SQLEXPRESS";
    QString dbName = "test";

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

    db.setConnectOptions();

    QString dsn = QString("DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes").arg(serverName).arg(dbName);

    db.setDatabaseName(dsn);

    if(db.open())
    {
        qDebug() << "Open!";
        db.close();
    }
    else
    {
        qDebug() << "Error = " << db.lastError();
    }

    return a.exec();
}
 

proszę o pomoc

0

Bo najpewniej ich nie masz-sprawdź poprzez QSqlDatabase::drivers();
Jeśli faktycznie nie ma,to zerknij na to:
http://doc.qt.nokia.com/4.8-snapshot/sql-driver.html#how-to-build-the-odbc-plugin-on-windows

0

Tak, najpierw ich nie miałem, więc zrobiłem zgodnie z instrukcją i już są, ale nadal nie działa.
Czegoś nie rozumiem?

0

Pewnie ścieżkę masz nie ustawioną.Sposoby na to są 2:
1)Tworzysz your_exe_location\plugins\sqldrivers i tam wsadzasz driver od odbcka
2)Używasz QCoreApplication::setLibraryPaths() żeby nastawić na coś innego

0

Teraz mam tochę inny problem, bo wcześniej miałem osobno zainstalowany Qt creator i Qt jako dodatek do Visuala.
Usunąłem to i to i zainstalowałem od nowa tylko Qt creator z http://qt.nokia.com/downloads Offline installer - 1.6 GB.
I chcę utworzyć te sterowniki, ale nie mam nigdzie pliku odbc.pro

Skąd mam go wziąć i gdzie ma on być ostatecznie umiejscowiony?

0

Zdeinstaluj Qt Creatora i pobierz pełne Qt SDK-w jego skład wchodzi Qt Creator i wszystkie biblioteki Qt,zatem i projekt do zbudowania sobie sterowników od odbc też powinien być w tym zawarty.

0

źle napisałem, pobrałem i zainstalowałem właśnie pełene Qt SDK i tam nie ma tego pliku

0

Maintain Qt SDK(w starcie powinno być)>Package Manager>Miscellaneous>Qt Sources>Zaznacz tam którego Qt źródła chcesz(najlepiej tego, którego używasz)
Potem Next i czekasz aż skończy robotę i zabierasz się za drivera. Sam to nie dawno przerabiałem (QPSQL i QMYSQL).

0

ok, dzięki mam już te sterowniki, jednak nadal program mówi mi, że się nie załadowały :/

0
MasterBLB napisał(a)

Pewnie ścieżkę masz nie ustawioną.Sposoby na to są 2:
1)Tworzysz your_exe_location\plugins\sqldrivers i tam wsadzasz driver od odbcka
2)Używasz QCoreApplication::setLibraryPaths() żeby nastawić na coś innego

  1. też nie działa
    2)zrobiłem tak:
 

QStringList l;
           l.append(QCoreApplication::applicationDirPath());
           l.append(QCoreApplication::applicationDirPath()+"C:/QtSDK/QtSources/4.7.4/src/plugins/sqldrivers");
           QCoreApplication::setLibraryPaths(l);


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

    db.setConnectOptions();

i też nie działa.

Co robię źle?

0

Co wypluwa

QSqlDatabase::drivers();

?

0

Tak to należy robić:

QSqlDatabase::addDatabase("QODBC");	
QSqlDatabase base=QSqlDatabase::database();

No i tak jak ci mówiłem wcześniej i teraz tomekpaw podowiada obacz,co dostajesz z QSqlDatabase::drivers()

0

Ok, teraz mój kod wygląda tak:

 

#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QtDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString serverName = "MICHAELL65-PC\\SQLEXPRESS";
    QString dbName = "test";

    //QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

    QSqlDatabase::addDatabase("QODBC");
    QSqlDatabase db=QSqlDatabase::database();


    db.setConnectOptions();


    QStringList list=QSqlDatabase::drivers();
     for(int i=0;i<list.size();i++)
      qDebug() <<list.at(i).toAscii().data()<<endl;


    QString dsn = QString("DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes").arg(serverName).arg(dbName);

    db.setDatabaseName(dsn);

    if(db.open())
    {
        qDebug() << "Open!";
        db.close();
    }
    else
    {
        //qDebug() << "Error = " << db.lastError();
    }

    return a.exec();
}


i podaje w konsoli:
QSqlDatabaseProvate::database: unable to open database: "[Microsoft][Odbc Driver Manager] Data source name not found and no default driver specified QODBC3: Unable to connect"

Sterowniki:

QSQLITE, QODBC3, QODBC

i udało się otworzyć bazę danych, bo wyskoczyło "Open!".

Jak się odnieść do tego pierwszego komunikatu?

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