0

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();

エラー メッセージ:

  1. f3ErpDb.setDatabaseName(f3ErpDsn);
    エラーメッセージが次setDatabaseNameの 場合:f3ErpDsn

    "QODBC3: 接続できません"、"[unixODBC][ドライバー マネージャー] データ ソース名が見つからず、デフォルト ドライバーが指定されていません")

    odbc.ini で SQLSERVER を定義しました。なぜそれが見つからないのですか?

  2. しかし、私が変更した場合f3ErpDb.setDatabaseName("SQLSERVER");、エラーメッセージは次のとおりです。

    "[FreeTDS][SQL Server]着信表形式データ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが正しくありません。パラメーター 1 (""): データ型 0x00 が不明です。QODBC3: ステートメントを実行できません"

それは私を混乱させます、誰か私を助けることができますか?

4

2 に答える 2

0

QSqlDatabaseが何であるかわかりません。しかし、SQL接続文字列が不適切なようです。

次のようなものを試してください。

UID=inp;PWD=inp;DSN=SQLSERVER;database=Live;SERVER=AMIN\SQLEXPRESS;charset=UTF-8

DSN=SQLSERVERSQLSERVERで定義された唯一のDSNであるためodbc.ini

SERVER=AMIN\SQLEXPRESS-ホストのIPアドレスではなく、SQL ServerのWindows名を試してください(ここでIPが許可されているかどうかはわかりませんが、Windows名は100%機能しています)

于 2012-10-29T16:07:33.257 に答える