RubyでACCESS MDBアクセス

http://jp.rubyist.net/magazine/?0005-Win32OLE
を参考にして、RubyからMDBの操作を試した。

その際、気づいたのだが、上のページのeach_recordの最初のif節が何かおかしいと思う。
self.MoveFirstより後にやるならまだしも、each_recordが現在参照中のレコード位置に依存する結果になってしまう。
(each_recordを二回続けて呼び出した際の動作が恐らく期待通りでない)
が、何もないと、レコードが無い時とかINSERT文の後とかにエラーになるみたいなので、EOF or BOF でなく EOF and BOFとしたら良いかもしれない。


でも、Rubyの特異メソッドは面白いな、と思う。
それを使って、startADOを次のようにすると使いやすいと思う。

def startADO filename 
  cn = WIN32OLE.new("ADODB.Connection")
  connstr = "DRIVER={Microsoft Access Driver (*.mdb)};Dbq=#{filename}"
  cn.Open connstr
  def cn.doQuery sql
    rs = self.Execute sql
    rs.extend Recordset
    return rs
  end
  begin 
    yield cn
  ensure
    cn.Close
  end
end