Ruby + Sequel を使って、ADOやODBCでMS Access(accdb) へ接続する

以前、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

 

参考