刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Qt5: MSSQLへアクセスするために

前のエントリーで、今年の2月くらいに試してた事のまとめは終わりです。
もう少し補足してもいいのですが、その前にQt5からSQLServerにアクセスしてみます。

そもそもマルチプラットホームでSQLServerにアクセスするにはどうするのがいいのかと。
敢えてSQLServerにこだわる必要はないのですが、僕のデータ資産はMSSQLなのです。
せっかく蓄積したデータを有効活用できないのは、何か悔しいのです。

Qt5からQSqlDatabaseクラスを利用するにあたり、色々と準備しないとです。
僕に適した環境を、僕が最も簡単に構築するために、MacPortsを利用します。
そして、MavericksからSQLServerにアクセスするにはFreeTDSとunixODBCが必要です。
以降、MacPortsのインストールは済んでる前提で進めます。

## /usrや/usr/local等が汚されるのは耐られないので・・・。Homebrew派の方ごめんなさい。
## OSXの初期状態はiODBC/MySQLなので、これはスルー。
## プロプラかつ有償ならこれでもいいのかな。

今回のキモはFreeTDSのインストールにあると言っても過言ではありません。
初期インストールの方はそのまま。既にインストールされた方は必ずオプションを付けて!

$ sudo port info freetds  ←ここでオプション確認
$ sudo port install freetds +mssql +odbc +universal

絶対に!絶対に!"+mssql +odbc +universal"を指定するのを忘れないでください。
これしないと、dylibが生成されません。これを忘れると、きっとハマります。
ちなみに、僕はPHP環境との併用でハマりました。

さて、目的のSQLServerにはNorthwindJがあるとします。
Windows環境から、osql -S <サーバ名> -U sa -P sqlでアクセスできるとします。
同様にMacのターミナルから、tsqlやisqlで接続する事を目指します。

でも、すみません。後述の内容は約2年前に構築済みなので、誤りがあるかもです。
手順は確かこんな感じ。まずはドライバー。

$ vi /opt/local/etc/freetds/tds.driver.template

[TDS]
Description = FreeTDS Driver for OSX & MSSQL
Driver      = /opt/local/lib/libtdsodbc.so
Setup       = /opt/local/lib/libtdsodbc.so

そしてDSN。

$ vi /opt/local/etc/freetds/tds.dsn.template

[NorthwindJ]
Driver          = TDS
Description     = DSN for NorthwindJ
Trace           = No
ServerName      = <サーバ名>
Database        = NorthwindJ
Port            = 1433
TDS_Version     = 8.0

これらをインストール。

$ sudo odbcinst -i -d -f tds.driver.template
$ sudo odbcinst -i -s -l -f tds.dsn.template

で、freetds.confを確認。

$ vi /opt/local/etc/freetds/freetds.conf

(行末に追加)
[<サーバ名>]
        host = 192.168.xxx.xxx  ; ← ここはSQLServerIPアドレス
        port = 1433
        tds version = 8.0
        client charset = UTF-8
;       charset = CP932
;       charset = sjis
;       language = japanese

環境変数ODBCINIやFREETDSCONF辺りも調整が必要だったかも。
もう何を調整したか覚えてません。すみません。
最終的にこれがエラーにならなければ環境はOKです。

$ odbcinst -j
$ odbcinst -q -s
$ odbcinst -q -d

$ tsql -S <サーバ名> -U sa -P sql
 とか
$ isql -v NorthwindJ sa sql

以前にExcel2011のiODBCと格闘してたので、勘違いしてなきゃ良いけど。
とにかく、これでMacからODBC接続はできると思います。
SQLAllocEnv();からコツコツ書いてもいけるハズですよ。