ruby调用Office Jet引擎压缩access数据库
jet
office
ruby
壓縮
引擎
呼叫
由于单位业务需要,搭建一台服务器专门用来做数据存储。因为数据流很小,遂采用access库作为DB。开始还好,但是后来发现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
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)