2

Windows マシンで MS SQL Server 9.0.4035 を使用しています。OpenSUSE 12.3 で安定した freetds 0.91 と unixODBC 2.2 を使用して接続しています。conf は次のとおりです。

freetds.conf:

...
[egServer70K]
host = 192.168.16.37
instance = [my_instance]
port = 1435
tds version = 8.0
client charset = UTF-8
...

odbc.ini :

[msdsn]
Driver = FreeTDS
Description = MSSQL database for ay
Servername=egServer70K

tsql および isql で次の sql クエリを実行すると、次のようになります。

tsql -S egServer70K -U [login]
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> SELECT TOP(3) guid FROM [table_name] ORDER BY data_time;
2> go
guid
9A2911A6-ADE1-4AE0-B7FC-A93F7821BB1D
E2C0797E-057C-4C0E-8562-62D020C5F49C
13143608-B52B-4DBF-B571-0AD21592BABA
(3 rows affected)

(これは、freetds のレベルではすべてが問題ないことを意味します。)

そして、私がこれをやっているときに得たのと同じです:

isql -v msdsn [login] [pass]

SQL> SELECT TOP(3) guid FROM [table_name] ORDER BY data_time;

+-------------------------------------+
| guid                                |
+-------------------------------------+
| 9A2911A6-ADE1-4AE0-B7FC-A93F7821BB1D|
| E2C0797E-057C-4C0E-8562-62D020C5F49C|
| 13143608-B52B-4DBF-B571-0AD21592BABA|
+-------------------------------------+
SQLRowCount returns 3
3 rows fetched

(これは、unixODBC のレベルではすべて問題ないことを意味します)。

しかし、Qt 4.8.4 で次のコード行を実行すると:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
             db.setHostName("192.168.16.37");
             db.setDatabaseName("msdsn");
             db.setUserName("...");
             db.setPassword("...");

QSqlQuery q( db);
    q.exec(
      "SELECT TOP(3) guid FROM [table_name] ORDER BY data_time;");
    while( q.next()) {
        qDebug() << q.value(0);
    }

私が得たのは:

QVariant(QString, "") 
QVariant(QString, "")
QVariant(QString, "")

私は何をすべきか?

PS> Qt 5 が使えません。

4

0 に答える 0