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 questoQSqlDatabase: 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 -
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(); }