使用ruby与MS Access数据库交互
ruby常规访问access数据库的方法应该是使用DBI库
:
require 'dbi'
DBI.connect("DBI:ADO:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;")
可是
简单尝试之后没能成功,提示找不到驱动器ADO,懒得再试,遂找其他方法。
一番搜索之后,发现可以用WIN32OLE来访问access,写一个简单的类包装之:
require 'win32ole'
class AccessDb
attr_accessor :mdb, :connection, :data, :fields
def initialize(mdb=nil)
@mdb = mdb
@connection = nil
@data = nil
@fields = nil
end
def open
connection_string = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
connection_string << @mdb
@connection = WIN32OLE.new('ADODB.Connection')
@connection.Open(connection_string)
end
def query(sql)
recordset = WIN32OLE.new('ADODB.Recordset')
recordset.Open(sql, @connection)
@fields = []
recordset.Fields.each do |field|
@fields << field.Name
end
begin
@data = recordset.GetRows.transpose
rescue
@data = []
end
recordset.Close
end
def execute(sql)
@connection.Execute(sql)
end
def close
@connection.Close
end
end
使用方法如下:
db=AccessDb.new('f:\db.mdb')
db.open
db.query('select * from foods')
db.fields
db.data
db.execute("insert into foods values (3,'xxx',299,'xo','good!');"
db.close
下面再给出使用ruby压缩修复access数据库的例子:
require 'win32ole'
def fixaccess(path,newpath)
jet=WIN32OLE.new('JRO.JetEngine')
File.delete(newpath) if File.exist?(newpath)
sp="Provider=Microsoft.ACE.OLEDB.12.0"
ss=sp+";Data Source="+path
sd=sp+";Data Source="+newpath+";Jet OLEDB:Engine Type=5"
jet.CompactDatabase ss,sd
end
比如要求压缩db.mdb文件,压缩后的文件名为new_db.mdb操作如下:
fixaccess('f:\db.mdb','f:\new_db.mdb')
方法fixaccess中的sp在安装了office2007的系统上
相关文档:
分页中用到类变量,主要是用来标记“页码输入框”的id 如果一个页面有几个分页,“页码输入框”的id要是不同的才能分清是哪个要分页。使用类变量就是为了达到这个目的,让所有的对象实例共用一个变量,不必每次重新初始化变量。 类变量使用代码示例 1 require 'ruby-debug'
2 debugger
3 cla ......
我们在使用C编程时会遇到一个问题,比如头文件的一个函数包含在一个lib中,但是
在实际连接中我们不知道它在哪个库中。也许可行的一种办法是直接上网查询某个
函数的依赖条件,这对于常用函数是没问题的!但是对于复杂而又缺少文档的第三方
lib来说,无异于大海捞针。
自此通过2种办法来尝试解决这个问题,我们先看第一 ......
连接access数据库代码,写在一个单独的类里
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
namespace AppWebDLL
{
public class ConnApp
{
  ......
做毕业设计,最初考虑到方便性,在选择数据库时就用了Access(可移植性太强了),在测试时抛出了这样的错误:
System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误异常
遍寻网上高人,说法都各不一样,不过最后还是找到了问题所在:Access保留字!
因为在数据库设计时没有考虑到列名会与Access保留字重复,遂 ......
开发环境:
OS:Windows XP
Ruby:Ruby1.9.1
Rails:Rails2.3.5
will_paginate:will_paginate2.3.11
(在命令行中运行 gem install mislav-will_paginate --source http://gems.github.com )
IDE:Rubymine2.0.1
DB:mysql5.0.9
本例在上一个例子(Ruby实践—简单数据库操作)的基础上实现分页,利用的是will_p ......