Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Collegamento SQL server 2008 MS



  • Ho seguito un tutorial on line per la creazione di un programma che si occupa di interrogare un database SQL SERVER 2008
    e quando lo compilo mi scrive questo

    QSqlDatabase: QOBDC3 driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
    

    uso questo costruttore

    DatabaseConnection::DatabaseConnection(const  QString &server,
                                           const QString &driver,
                                           const QString &user,
                                           const QString &password,
                                           const QString &databaseName,
                                           bool trustedConnection)
    {
       mDatabase = QSqlDatabase::addDatabase("QOBDC3") ;
       mDatabaseName = databaseName;
       mServer = server;
       mDriver = driver;
       mUser = user;
       mPassword=password;
       mTrustedConnection = trustedConnection;
    }
    
    

    a cui passo i seguenti parametri

     mDbConnection("Nome Server",
                      "SQL Server",
                     "sa",
                      "password",
                      "nome database",
                      true)
    
    

    Utilizzo per questo windows 10
    e vorrei anche precisare che il nome server è
    PC\PIPPO, quindi vorrei chiedere come inserire il \ nello schema



  • Hi installato un driver ODBC sulla tua macchina?



  • Si sono installati sia a 32 che 64 bit
    e ho trovato questi due tipi:
    SQL Server
    SQL Server Native Client 10.0

    con i relativi driver
    DRIVER={SQL Server}
    DRIVER={SQL Server Native Client 10.0}



  • Puoi, invece di puntare al tuo database, provare ad aprire un file excel con odbc (il come e' descritto qui: https://wiki.qt.io/Handling_Microsoft_Excel_file_format)

    Voglio capire se il problema e' nel setup o nell'individuare il DB



  • Ho modificato il programma come mi hai consigliato, però mi dà lo stesso errore. Ti metto tutto il codice completo

    databaseconnectio.h

    #ifndef DATABASECONNECTION_H
    #define DATABASECONNECTION_H
    
    #include <QSqlDatabase>
    
    
    class DatabaseConnection
    {
    public:
        DatabaseConnection(
                           const QString &driver,
                           const QString &dbq);
        bool openDatabase(QString *error = nullptr);
    private:
        QSqlDatabase mDatabase;
        QString mDbq;
        QString mDriver;
    };
    
    #endif // DATABASECONNECTION_H
    

    databaseconnection.cpp

    #include "databaseconnection.h"
    #include <QSqlQuery>
    #include <QSqlError>
    
    DatabaseConnection::DatabaseConnection(
                                           const QString &driver,
                                           const QString &dbq)
    {
       mDatabase = QSqlDatabase::addDatabase("QOBDC","xslx_connection") ;
       mDbq = dbq;
       mDriver = driver;
    }
    
    bool DatabaseConnection::openDatabase(QString *error)
    {
        mDatabase.setDatabaseName(QString("DRIVER={%1};DBQ=%2")
                                  .arg(mDriver)
                                 .arg(mDbq));
        if (!mDatabase.open()){
            if (error != nullptr){
                *error = mDatabase.lastError().text();
            };
        return false;
        };
            return true;
    }
    
    

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include "databaseconnection.h"
    
    namespace Ui {
    class MainWindow;
    }
    
    class QSqlQueryModel;
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private slots:
        void on_actionUscire_dal_programma_triggered();
    
        void on_actionRiguardo_a_Qt_triggered();
    
        void on_actionAccesso_a_Microsoft_SQL_Server_triggered();
    
    private:
        Ui::MainWindow *ui;
        DatabaseConnection mDbConnection;
        QSqlQueryModel * mModel;
    };
    
    #endif // MAINWINDOW_H
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QMessageBox>
    #include <QSqlQueryModel>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow),
        mDbConnection("Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)",
                      "C:\\percorso\\file\\XLS\\file.xlsx")
    {
        ui->setupUi(this);
        mModel = nullptr;
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_actionUscire_dal_programma_triggered()
    {
       close();
    }
    
    void MainWindow::on_actionRiguardo_a_Qt_triggered()
    {
        QMessageBox::aboutQt(this,"Qt");
    }
    
    void MainWindow::on_actionAccesso_a_Microsoft_SQL_Server_triggered()
    {
        QString error;
        if (!mDbConnection.openDatabase(&error)){
            QMessageBox::critical(this,"Error",error);
            return;
        };
        if (mModel == nullptr){
            mModel = new QSqlQueryModel(this);
            mModel->setQuery ("select * from [" + QString("Sheet1") + "$A4:B5]");
            ui->tableView->setModel(mModel);
        }
        else
        {
            mModel->setQuery ("select * from [" + QString("Sheet1") + "$A4:B5]");
        }
    }
    
    

    main.cpp

    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        a.setStyle("fusion");
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    
    


  • Ma stavo pensando non è che devo magari aggiungere un file .dll da aggiungere nella cartella della compilazione?
    Anche perchè sto provando appunto anche ad agire su un file excel e credo che mi dia lo stesso problema.



  • Risolta la frittata. Negli strumenti di amministrazione ho letto per esteso il nome dei driver e una volta corretto si è messo ad andare.

    Nel mio caso era

    SQL Server Native Client 10.0
    

    Grazie ancora per l'attenzione.


Log in to reply