たむら です。

        Mon, 23 Aug 1999 12:37:15 +0900 の
        [ruby-list:16261] Re: ruby から MS SQL Server へのアクセス
        に関するメールのリプライです。

 20分くらいで、書きましたので信用しないでください。
ADO とは、MSの提唱する Data へのアクセス手法です。
RDBMS だけでなく、OLAP や メールシステムなどに透過的に接続するもの
だそうです。
# そうは言っても MS だし

Windowsの世界では、%w(ODBC DAO RDO) などから、%w(ADO) の移行を勧めて
いますが、性能や様々な問題より、まだ主流とは言えないものの無視できない
存在といったところ。
ruby-cygwin /w win32ole な環境からなら、ODBC or OLE DB があれば
どんな DB とも接続できるはずです。テストは、SQL Server6.5 の pubs を
ODBC 経由にて接続してます。

=== ここから
module ParseSql
  def rs? sql
    sql.scan(/^\s*SELECT /i).size != 0
  end
end

class ADOconn
  include ParseSql

  def initialize(str)
    require 'win32ole'
    @ado = WIN32OLE.new('ADODB.Connection')
    @ado.Open str
  end
  def close
    @ado.Close
  end
  def query(sql)
    if rs?(sql)
      rs  = @ado.Execute(sql)
      unless rs.nil?
        result = []
        until rs.EOF
          l = []
          for r in rs.Fields
             l << r.Value
          end
          result << l
          rs.MoveNext
        end
        rs.Close
      end
      return result
    else
      @ado.Execute(sql)
    end
  end
end
if __FILE__ == $0
  conn =ADOconn.new( "Driver={SQL Server};Server=srv;Uid=sa;Pwd=;Database=pubs")
  conn.query("SELECT * FROM titles").each do |r|
    puts r.join("\,")
  end
  conn.close
end
=== ここまで

                    --------------------------------------------------
                      トランス・コスモス株式会社 福岡支社システム課
                                                  田村 賢一
                         tamura / fko.trans-cosmos.co.jp
                         t9655832 / aar.trans-cosmos.co.jp
                                  ** 祝 ruby-1.4.0 リリース **
                    --------------------------------------------------