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