Linux redhat 64bit で odbc 経由で MSSQL (Windows) を接続しました。
以下は、odbc および freetds 構成ファイルです。
freetds.conf
:
[FreeTDS]
host=172.21.32.20
port=1433
tds version=7.2
client charset = GB2312
odbcinst.ini
:
[TDS]
Description = TDS
Driver = /usr/local/lib/libtdsodbc.so
Trace = Yes
TraceFile=/tmp/odbcinst.log
UsageCount = 1
odbc.ini
:
[SQLSERVER]
Driver = TDS
Description = sql server dsn
Trace = NO
Server = 172.21.32.20
Database = Live
Port = 1433
TDS_Version = 7.2
TraceFile=/tmp/sqlserver.log
切れ端:
QString f3ErpDsn = QString::fromLocal8Bit("Driver={SQLSERVER};server=172.21.32.20;database=Live;uid=inp;pwd=inp;");
QSqlDatabase f3ErpDb= QSqlDatabase::addDatabase("QODBC");
f3ErpDb.setDatabaseName(f3ErpDsn);
// f3ErpDb.setDatabaseName("SQLSERVER");
f3ErpDb.setUserName("inp");
f3ErpDb.setPassword("inp");
QString sqlCmdStr = "select * from dbo.Table_Drilling_Data01 where status=1";
if ( ! f3ErpDb.open() )
{
qDebug() << f3ErpDb.lastError().text();
return 1;
}
QSqlTableModel model;
model.setTable("dbo.Table_Drilling_Data01");
model.setFilter("status=3");
model.select();
qDebug() << model.lastError().text();
エラー メッセージ:
f3ErpDb.setDatabaseName(f3ErpDsn);
エラーメッセージが次setDatabaseName
の 場合:f3ErpDsn
"QODBC3: 接続できません"、"[unixODBC][ドライバー マネージャー] データ ソース名が見つからず、デフォルト ドライバーが指定されていません")
odbc.ini で SQLSERVER を定義しました。なぜそれが見つからないのですか?
しかし、私が変更した場合
f3ErpDb.setDatabaseName("SQLSERVER");
、エラーメッセージは次のとおりです。"[FreeTDS][SQL Server]着信表形式データ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが正しくありません。パラメーター 1 (""): データ型 0x00 が不明です。QODBC3: ステートメントを実行できません"
それは私を混乱させます、誰か私を助けることができますか?