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 ; ← ここはSQLServerのIPアドレス
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
以前にExcel2011のiODBCと格闘してたので、勘違いしてなきゃ良いけど。
とにかく、これでMacからODBC接続はできると思います。
SQLAllocEnv();からコツコツ書いてもいけるハズですよ。