使用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.

 


相关文章
|
2月前
|
存储 SQL 监控
Visual Basic与数据库交互:实现数据访问和管理
【4月更文挑战第27天】本文探讨了使用Visual Basic进行数据库编程的基础,包括数据库基础、连接、数据访问技术如ADO.NET,数据绑定,事务处理,存储过程与视图。还强调了性能优化、安全性、测试与调试,以及持续维护的重要性。通过掌握这些概念和技巧,开发者能构建高效、可靠的数据驱动应用。
|
8天前
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
5天前
|
存储 监控 安全
跟数据库交互涉及的敏感数据操作需要有哪些措施
跟数据库交互涉及的敏感数据操作需要有哪些措施
|
1月前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
1月前
|
Java 关系型数据库 数据库连接
【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南
【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南
25 1
|
26天前
|
存储 JSON JavaScript
数据库操作对象 db,用于与浏览器的 localStorage 交互
数据库操作对象 db,用于与浏览器的 localStorage 交互
15 0
|
29天前
|
存储 SQL PHP
PHP中的PDO与数据库交互
PHP的PDO扩展提供了一种方式来统一访问多种数据库
|
1月前
|
NoSQL 关系型数据库 MongoDB
DTS支持哪些非关系型数据库的数据交互?
【6月更文挑战第4天】DTS支持哪些非关系型数据库的数据交互?
29 1
|
1月前
|
缓存 Java 数据库连接
构建高效数据库交互:Hibernate与JPA的性能优化策略
【6月更文挑战第25天】在大数据时代,优化Hibernate和JPA的数据库性能至关重要。本文探讨了优化策略:正确配置映射以减少冗余,利用JPQL/HQL提升查询效率,避免全字段选择,使用索引和分页,有效利用缓存策略,以及管理事务以平衡资源锁定。示例代码展示了分页查询的实现,以防止性能下降。
|
2月前
|
存储 数据挖掘 关系型数据库
DataFrame 与数据库交互:从导入到导出
【5月更文挑战第19天】本文介绍了如何在数据分析中实现DataFrame与MySQL数据库之间的数据交互。通过`pandas`的`read_sql`函数可将数据库中的数据导入DataFrame,处理后使用数据库游标执行插入或更新操作将数据导回。注意数据类型匹配、数据完整性和一致性。对于大量数据,可采用分块读取和批量操作提升效率。这种交互能结合数据库的存储管理和DataFrame的分析功能,提高数据处理效率。
62 2