如何查询MS Access数据库表,并使用Ruby和win32ole将信息导出到Excel?

如何查询MS Access数据库表,并使用Ruby和win32ole将信息导出到Excel?,ruby,windows,win32ole,Ruby,Windows,Win32ole,我是Ruby新手,我正在尝试查询现有的MS Access数据库以获取报表信息。我希望这些信息存储在Excel文件中。我该怎么做?为什么要这样做?您可以直接从Excel查询数据库。看看这个。为什么要这样做?您可以直接从Excel查询数据库。看看这个。正如Johannes所说,您可以从Excel查询数据库 但是,如果您更愿意使用Ruby 您可以找到有关使用Ruby查询Access/Jet数据库的信息 可以找到很多关于使用Ruby自动化Excel的信息 David正如Johannes所说,您可以从Ex

我是Ruby新手,我正在尝试查询现有的MS Access数据库以获取报表信息。我希望这些信息存储在Excel文件中。我该怎么做?

为什么要这样做?您可以直接从Excel查询数据库。看看这个。

为什么要这样做?您可以直接从Excel查询数据库。看看这个。

正如Johannes所说,您可以从Excel查询数据库

但是,如果您更愿意使用Ruby

您可以找到有关使用Ruby查询Access/Jet数据库的信息

可以找到很多关于使用Ruby自动化Excel的信息


David

正如Johannes所说,您可以从Excel查询数据库

但是,如果您更愿意使用Ruby

您可以找到有关使用Ruby查询Access/Jet数据库的信息

可以找到很多关于使用Ruby自动化Excel的信息

David

尝试以下方法之一:

OLE:

请尝试以下方法之一:

OLE:


我很想知道你是怎么做的,你是否使用了这些解决方案?我很想知道你是怎么做的,你是否使用了这些解决方案?
require 'win32ole'

class AccessDbExample
  @ado_db = nil

  # Setup the DB connections
  def initialize filename
    @ado_db             = WIN32OLE.new('ADODB.Connection')
    @ado_db['Provider'] = "Microsoft.Jet.OLEDB.4.0"
    @ado_db.Open(filename)
  rescue Exception => e
    puts "ADO failed to connect"
    puts e
  end

  def table_to_csv table
    sql = "SELECT * FROM #{table};"

    results = WIN32OLE.new('ADODB.Recordset')
    results.Open(sql, @ado_db)

    File.open("#{table}.csv", 'w') do |file|
      fields = []
      results.Fields.each{|f| fields << f.Name}
      file.puts fields.join(',')

      results.GetRows.transpose.each do |row|
        file.puts row.join(',')
      end
    end unless results.EOF

    self
  end

  def cleanup
    @ado_db.Close unless @ado_db.nil?
  end
end

AccessDbExample.new('test.mdb').table_to_csv('colors').cleanup
  require 'odbc'

    include ODBC

    class AccessDbExample
      @obdc_db = nil

      # Setup the DB connections
      def initialize filename
        drv                 = Driver.new
        drv.name            = 'AccessOdbcDriver'
        drv.attrs['driver'] = 'Microsoft Access Driver (*.mdb)'
        drv.attrs['dbq']    = filename
        @odbc_db            = Database.new.drvconnect(drv) 
      rescue 
          puts "ODBC failed to connect"
      end

      def table_to_csv table
        sql = "SELECT * FROM #{table};"

        result = @odbc_db.run(sql)
        return nil if result == -1

        File.open("#{table}.csv", 'w') do |file|
          header_row = result.columns(true).map{|c| c.name}.join(',')
          file.puts header_row

          result.fetch_all.each do |row|
            file.puts row.join(',')
          end
        end

        self
      end

      def cleanup
        @odbc_db.disconnect unless @odbc_db.nil?
      end
    end

    AccessDbExample.new('test.mdb').table_to_csv('colors').cleanup