以前、Ruby + DBIを使ってMS Accessへと接続してみました。
Ruby + Sinatra + DBI + ODBC で、MS Access(accdb)へ接続する - メモ的な思考的な
しかし、毎回生SQL文を書いた上でShift_JISに変換する必要があり少々手間に感じました。そのため、PadrinoのページにまとめられているORMを対象に、そこらへんをうまくやってくれるものがないかを調べてみました。
Guides Generators - Padrino Ruby Web Framework
SequelにはADOやODBCの記載がある*1一方、ActiveRecordやDataMapperでは使えそうになかったり*2、記載がありませんでした*3。
そこで、SequelでADOやODBCを使った接続を試してみることにしました。
環境
接続
ADOやODBCを使うときのパラメータなどはSequelのドキュメントに記載されています。
sequel/doc/opening_databases.rdoc at master - jeremyevans/sequel - GitHub
それを元に、
の3つ方法で接続するコードを書いてみて気になったところを表にまとめてみました。
項目 | ADO | ODBC + DSN | ODBC + DSNレス |
---|---|---|---|
gemruby-odbc |
- | 必要 | 必要 |
DSNの設定 | - | 必要 | - |
ネットワーク上のホストの指定 | IPアドレスやホスト名を使う | ネットワークドライブを割り当てる | IPアドレスやホスト名を使う |
プリベアードステートメントで使う:$n 値*4 の文字コード変換 |
- | 必要(Shift_JIS ) |
必要(Shift_JIS ) |
Accessの列名のシンボル表記(例:Hoge列の場合) | そのまま(row[:Hoge]) | 小文字化(row[:hoge]) | 小文字化(row[:hoge] |
ODBCは文字コードの変換や列名の指定で手間がかかりそうなので、ADOが使える環境であればADOを使いたいと感じました。
ソースコード
DB接続時の設定は以下にまとめました。
Sequel: Connecting to Microsoft Access(*.accdb)
また、Sinatraとともに使うときのコードはGitHubに置いておきました。 thinkAmi/SinatraToMSAccess-Sample - GitHub