我们正在尝试移植一个在Ubuntu 14.04.5上运行的简单的Qt 4.8.5 C ++代码并成功使用UnixODBC 2.2.14和FreeTDS 0.91在MSSQL数据库上执行单个SELECT语句来执行相同的操作在Sybase数据库上。
我们目前收到的错误是[unixODBC][Driver Manager]Function sequence error
。
我们的配置如下所示:
/etc/odbc.ini
[myapp-odbc]
Database=variansystem
Description=MS SQL Server for MyApp connections
Driver=FreeTDS
ReadOnly=Yes
Servername=myapp-freetds
Trace=No
/etc/freetds/freetds.conf
[global]
client charset = UTF-8
tds version = 8.0
[myapp-freetds]
client charset = UTF-8
host = 192.168.0.5
port = 5000
tds version = 5.0
C ++伪代码
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "MyConn");
db.setUserName("user");
db.setPassword("pass");
db.setDatabaseName("myapp-odbc");
if (!db.open()) return;
QSqlQuery query(db);
query.prepare("SELECT table1.col1, table1.col2, table1.col3, table2.col4, table3.col5 " +
"FROM table1 " +
"JOIN table2 ON table1.col2 = table2.col4 " +
"JOIN table3 ON table1.col3 = table3.col5 " +
"WHERE table1.col1 > :limit1 " +
"ORDER BY table1.col1;");
query.bindValue(":limit1", 123);
if (!query.exec())
{
qDebug() << query.lastError().text(); // "[unixODBC][Driver Manager]Function sequence error"
return;
}
不拥有Sybase或Ubuntu服务器,我们的调试选项仅限于我们可以添加到C ++代码中的内容。