开发者社区> 大熊猫侯佩> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用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的系统上测试成功,其他版本

的office可能要修改sp中的Provider.

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何使用mysql api关闭ssl模式提高查询效率
通过查询MySQL的官方的英文网页说明,大致了解了设置的方法。通过mysql_options接口函数可以实现。
0 0
性能测试工具操作数据库(七)-Loadrunner与SQL Server
Loadrunner与SQL Server的操作可以通过录制的方式来实现,但本文还是通过直接调用loadrunner本身的function来实现sql语句的操作,主要用到的是lr_db_connect和lr_db_executeSQLStatement两个函数,具体的用法这里不做解释,请自行查看loadrunner的帮助说明。
565 0
MYSQL老密码与php版本扩展关系
mysql的用户密码保存在数据库中是加密的。不可逆的。当需要创建一个新的帐号,如果是使用insert插入一条记录,mysql提供了一个函数PASSWORD(),对明文进行加密。所以有如下sql:insert into mysql.user values('帐号名',PASSWORD('设置的帐号密码'));但是,mysql4.1版本之前有些不同。
1071 0
数据同步框架MS Sync Framework - IDE快速开发支持Local Database Cache
数据同步框架MS Sync Framework [术语、例子、参考资料、Tips] http://www.cnblogs.com/2018/archive/2011/02/22/1961654.html  数据同步框架MS Sync Framework-不同场景使用例子和简要分析 http://www.cnblogs.com/2018/archive/2011/02/23/1961657.html 以上两篇文章对框架的基础有了描述,通过IDE的提供Local Database Cache可以快速的实现一个常用的同步应用。
568 0
+关注
大熊猫侯佩
贪吃贪睡的大熊猫侯佩
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式
立即下载
PostgresChina2018_董红禹_SQL_Server迁移PG经验分享
立即下载
SQL Sever迁移PG经验
立即下载