【发布时间】:2017-05-17 20:22:39
【问题描述】:
我正在尝试在 Qt 中连接到 ubuntu 上的 SQL Server 数据库,并且需要安装 ODBC 驱动程序。
我做了文件告诉我要做的here。并将 unixOBDC 从 here 安装到 /usr/local/unixODBC 然后运行这些命令
cd ~/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/odbc
qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
make
如果我现在运行我的代码,这就是我得到的结果
QSqlDatabase: QODBC driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
我错过了什么?
编辑:
makeg++ -c -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -std=c++11 -fvisibility=hidden -fvisibility-inlines-hidden -std = C ++ 11 -fno-例外-Wall -W -Wvla -Wdate时间-D_REENTRANT -fPIC -DQT_NO_TSLIB -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I。 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore/5.5.1 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore/5.5.1/QtCore -isystem /usr/include/x86_64 -linux-gnu/qt5/QtSql/5.5.1 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.moc -I../../../../mkspecs/ linux-g++-64 -o .obj/qsql_odbc.o ../../../sql/drivers/odbc/qsql_odbc.cpp ../../../sql/drivers/odbc/qsql_odbc.cpp:193:44:错误:ISO C++ 禁止声明没有类型的“Q_DECLARE_SQLDRIVER_PRIVATE”[-fpermissive] Q_DECLARE_SQLDRIVER_PRIVATE(QODBCDriver) ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:193:44: 错误:预期的';'在成员声明的末尾 ../../../sql/drivers/odbc/qsql_odbc.cpp:在构造函数“QODBCResultPrivate::QODBCResultPrivate(QODBCResult*, const QODBCDriver*)”中: ../../../sql/drivers/odbc/qsql_odbc.cpp:198:33:错误:没有匹配函数调用‘QSqlResultPrivate::QSqlResultPrivate(QODBCResult*&, const QODBCDriver*&)’ hasSQLFetchScroll(true) ^ 在 ../../../sql/drivers/odbc/qsql_odbc.cpp:59:0 包含的文件中: /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:67:5:注意:候选:QSqlResultPrivate::QSqlResultPrivate() QSqlResultPrivate() ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:67:5:注意:候选人期望0个参数,提供2个 /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:63:20:注意:候选:QSqlResultPrivate::QSqlResultPrivate(const QSqlResultPrivate&) 类 Q_SQL_EXPORT QSqlResultPrivate ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:63:20:注意:候选人需要1个参数,提供2个 ../../../sql/drivers/odbc/qsql_odbc.cpp:200:30:错误:“drv_d_func”未在此范围内声明 unicode = drv_d_func()->unicode; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void* QODBCResultPrivate::dpEnv() const’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:209:49:错误:“drv_d_func”未在此范围内声明 SQLHANDLE dpEnv() const { 返回 drv_d_func() ? drv_d_func()->hEnv : 0;} ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void* QODBCResultPrivate::dpDbc() const’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:210:49:错误:“drv_d_func”未在此范围内声明 SQLHANDLE dpDbc() const { 返回 drv_d_func() ? drv_d_func()->hDbc : 0;} ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘bool QODBCResultPrivate::isStmtHandleValid()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:228:42:错误:“drv_d_func”未在此范围内声明 返回 disconnectCount == drv_d_func()->disconnectCount; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘void QODBCResultPrivate::updateStmtHandleState()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:233:34:错误:“drv_d_func”未在此范围内声明 disconnectCount = drv_d_func()->disconnectCount; ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:在构造函数“QODBCResult::QODBCResult(const QODBCDriver*)”中: ../../../sql/drivers/odbc/qsql_odbc.cpp:959:51: 错误:没有匹配函数调用‘QSqlResult::QSqlResult(QODBCResultPrivate&)’ : QSqlResult(*new QODBCResultPrivate(this, db)) ^ 在 /usr/include/x86_64-linux-gnu/qt5/QtSql/5.5.1/QtSql/private/qsqlresult_p.h:51:0 包含的文件中, 来自../../../sql/drivers/odbc/qsql_odbc.cpp:59: /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:69:5: 注意:候选:QSqlResult::QSqlResult(QSqlResultPrivate&, const QSqlDriver*) QSqlResult(QSqlResultPrivate &dd, const QSqlDriver *db); ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:69:5:注意:候选人需要 2 个参数,提供 1 个 /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:68:14:注意:候选:QSqlResult::QSqlResult(const QSqlDriver*) 显式 QSqlResult(const QSqlDriver * db); ^ /usr/include/x86_64-linux-gnu/qt5/QtSql/qsqlresult.h:68:14:注意:没有已知的参数 1 从‘QODBCResultPrivate’到‘const QSqlDriver*’的转换 ../../../sql/drivers/odbc/qsql_odbc.cpp:在成员函数‘virtual bool QODBCResult::exec()’中: ../../../sql/drivers/odbc/qsql_odbc.cpp:1464:36:错误:“QODBCResultPrivate 类”没有名为“drv_d_func”的成员 int 精度 = d->drv_d_func()->datetime_precision - 20; // (2 ^ ../../../sql/drivers/odbc/qsql_odbc.cpp:1480:42:错误:“QODBCResultPrivate 类”没有名为“drv_d_func”的成员 d->drv_d_func()->datetime_precision, ^ Makefile:463: 目标 '.obj/qsql_odbc.o' 的配方失败 make: *** [.obj/qsql_odbc.o] 错误 1【问题讨论】:
-
尝试:sudo apt-get install unixodbc-dev unixodbc-bin unixodbc
-
该屏幕截图很难使用...如果您可以将文本复制并粘贴到此处的
<pre>…</pre>块中会更好。 -
@TallTed 已编辑..
-
注意 Ubuntu 已经为此预建了包,你可以 apt-get install libqt5sql5-odbc tdsodbc
-
@nos 我试过但没有成功..