ruby调用Office Jet引擎压缩access数据库
由于单位业务需要,搭建一台服务器专门用来做数据存储。因为数据流很小,遂采用access库作为DB。开始还好,但是后来发现access数据库有一问题,就是表空间会随着使用越来越大,哪怕表里没有数据。因为表中单次存放的内容是很小的,每隔几分钟会全删除然后再写入,所以表也会越来越大啊!
开始是用VB写的一个压缩软件,因为是M$自家的语言嘛,自然对Office系列支持很好,后来发现ruby中也可以通过Win32ole访问Jet引擎,为何不用ruby来写呢?因为是以前写的代码神马都用class来搞,稍显夸大,但效果还好。
#hb table write by hopy 2012
require 'win32ole'
require 'oci8'
class Hb
def initialize
@oci = OCI8.new("xxx","***","xxx")
end
def open
unless @acs
conn_str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=#{Dir.pwd}/hb.mdb"
#conn_str = "driver={SQL Server};database=xxx;server=localhost,1433;uid=sa;pwd=sa"
@acs = WIN32OLE.new('ADODB.Connection')
@acs.Open(conn_str)
end
end
def close
(@acs.Close;@acs=nil) if @acs
end
def cls
self.open
sql = "DELETE * from InTable";@acs.Execute(sql)
sql = "DELETE * from OutTable";@acs.Execute(sql)
end
def zip
start = Time.now
self.close
jet = WIN32OLE.new('JRO.JetEngine')
path = Dir.pwd+"/hb.mdb"
new_path=Dir.pwd+"/hb_ziped.mdb"
File.delete(new_path) if File.exist?(new_path)
sp = "Provider=Microsoft.Jet.OLEDB.4.0"
ss = sp+";Data Source="+path
sd = sp+";Data Source="+new_path
jet.CompactDatabase(ss,sd)
File.delete(path)
File.rename(new_path,path)
puts "access ziped , take #{Time.now - start} s"
end
def sync
self.cls
self.open
zb = [64981,57520]
i = 0;start = Time.now
ret = @oci.exec('select * from DBO.DPXS_ARRIVAL') do |r|
next if r[7].unpack("v*") != zb
zt = if r[24] == "Arrived"
r[23]
elsif r[25]
r[25]
else
r[23]
end
tm = if r[12]
r[12]
elsif r[11]
r[11]
else
r[10]
end
@acs.Execute("INSERT INTO InTable VALUES('#{r[0]}','#{tm}','#{r[13]}','#{zt}')");i+=1
end
<span style="white-space:pre"> </span>puts "sync #{i} arrival flights , take #{Time.now - start} s"
i = 0;start = Time.now
ret = @oci.exec('select * from DBO.DPXS_DEPARTURE') do |r|
next if r[7].unpack("v*") != zb
tm = if r[13]
r[13]
elsif r[12]
r[12]
else
r[11]
end
@acs.Execute("INSERT INTO OutTable VALUES('#{r[0]}','#{tm}','#{r[14]}','#{r[27]}')");i+=1
end
puts "sync #{i} departure flights , take #{Time.now - start} s"
end
end
INTERVAL_sec = 10
hb = Hb.new
t = 0
loop do
sleep(INTERVAL_sec);t+=INTERVAL_sec
hb.sync
(hb.zip;t=0) if t >= 60
#t=0 if t >= 60
end
ruby调用Office Jet引擎压缩access数据库的更多相关文章
- 备份和还原SQL Server及压缩Access数据库
功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO. ...
- Access数据库在线压缩的实现方法
如果在 Access 数据库中删除数据或对象,或者在 Access 项目中删除对象,Access 数据库或 Access 项目可能会产生碎片并会降低磁盘空间的使用效率.压缩 Access 数据库或Ac ...
- 实现压缩access(*.mdb)数据库的方法
下面的函数用来压缩access数据库 需要增加ComObj单元 //压缩与修复数据库,覆盖源文件 function CompactDatabase(AFileName,APassWord:string ...
- IIS发布网站Microsoft JET Database Engine 错误 '80004005'的解决办法,基于Access数据库
在网站发布后,访问网站会有80004005的错误提示. 项目环境 项目基于Access数据库,server2012,文件系统为NTFS格式. 错误信息 Microsoft JETDatabase En ...
- Access数据库及注入方法
目录 Access数据库 Access数据库中的函数 盲注Access数据库 Sqlmap注入Access数据库 Access数据库 Microsoft Office Access是由微软发布的关系数 ...
- ADO访问Access数据库错误解决心得随笔
最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010: Access2000~ ...
- 【转】如何将ACCESS数据库后缀名accdb改为mdb
office 2007中的ACCESS数据库保存时,默认的后缀名是*.accdb, 但是在数据库编程中,用到的后缀名却是*.mdb, 不能直接将后缀名由 accdb 改为 mdb,虽然没有出错,但是编 ...
- Err.number错误号和可捕获的 Microsoft access 数据库引擎和 DAO错误说明
错误码 信息2420 数字语法错误2421 日期语法错误2422 字符串语法错误2423 ‘.’.‘!’.或 ‘()’的使用无效2 ...
- C# - Excel - Microsoft Access 数据库引擎找不到对象
我几乎要无语了,疯掉了,以为是office本身的问题,换了好多次office2007,安装又不顺利,换到了office2010,想想大部分应该兼容2007,所以用着office2010了. 甚至差点要 ...
随机推荐
- DBoW2算法原理介绍
本篇介绍DBoW2算法原理介绍,下篇介绍DBoW2的应用. DBow2算法 DBow2是一种高效的回环检测算法,DBOW2算法的全称为Bags of binary words for fast pla ...
- FFmpeg源代码简单分析:avformat_write_header()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- 5、Android Service测试
如果你在应用中使用了Service,你应该来测试这个Service来确保它正常工作.你可以创建仪表测试来验证Service的行为是否正确:比如,service保存和返回有效的数值并正常的处理数据. A ...
- Android简易实战教程--第十三话《短信备份和还原~三》
之前写过短信备份的小案例,哪里仅仅是虚拟了几条短信信息.本篇封装一个业务类,且直接通过内容提供者,访问本系统的短信信息,再提供对外接口.如果想要短信备份和短信还原,直接复制这段代码即可.对于您调用这个 ...
- 套接字工厂——ServerSocketFactory
接收器Acceptor在接收连接的过程中,根据不同的使用场合可能需要不同的安全级别,例如在支付相关的交易就必须对信息加密后再发送,这其中还涉及到密钥协商的过程,而在另外一些普通场合则无需对报文加密.反 ...
- 海量数据挖掘MMDS week6: MapReduce算法(进阶)
http://blog.csdn.net/pipisorry/article/details/49445519 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- Socket编程实践(2) --Socket编程导引
什么是Socket? Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的 ...
- PA 创建项目
---- 创建项目 DECLARE l_orig_project_id NUMBER := 6; l_prj_num VARCHAR2(240) := 'CXYTEST001'; l_start_da ...
- 【Unity Shaders】概述及Diffuse Shading介绍
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- git简介及使用方法
一.git简介及安装1.git简介 Git 是用于 Linux 内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持, ...