Rumah pangkalan data tutorial mysql ruby调用Office Jet引擎压缩access数据库

ruby调用Office Jet引擎压缩access数据库

Jun 07, 2016 pm 03:50 PM
jet office ruby pemampatan enjin panggilan

由于单位业务需要,搭建一台服务器专门用来做数据存储。因为数据流很小,遂采用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 &gt;= 60
  #t=0 if t &gt;= 60
end
Salin selepas log masuk


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melihat dokumen perkataan dalam vscode Bagaimana untuk melihat dokumen perkataan dalam vscode Bagaimana untuk melihat dokumen perkataan dalam vscode Bagaimana untuk melihat dokumen perkataan dalam vscode May 09, 2024 am 09:37 AM

Bagaimana untuk melihat dokumen perkataan dalam vscode Bagaimana untuk melihat dokumen perkataan dalam vscode

Apa yang perlu dilakukan jika fail xlsx tidak boleh dibuka pada telefon bimbit Apa yang perlu dilakukan jika fail xlsx tidak boleh dibuka pada telefon bimbit Apr 25, 2024 am 08:28 AM

Apa yang perlu dilakukan jika fail xlsx tidak boleh dibuka pada telefon bimbit

WPS dan Office tidak mempunyai fon Cina, dan nama fon Cina dipaparkan dalam bahasa Inggeris. WPS dan Office tidak mempunyai fon Cina, dan nama fon Cina dipaparkan dalam bahasa Inggeris. Jun 19, 2024 am 06:56 AM

WPS dan Office tidak mempunyai fon Cina, dan nama fon Cina dipaparkan dalam bahasa Inggeris.

Xiaomi Mi Pad 6 siri melancarkan Pejabat WPS peringkat PC dalam kuantiti penuh Xiaomi Mi Pad 6 siri melancarkan Pejabat WPS peringkat PC dalam kuantiti penuh Apr 25, 2024 pm 09:10 PM

Xiaomi Mi Pad 6 siri melancarkan Pejabat WPS peringkat PC dalam kuantiti penuh

Xiaomi Mi Pad 6 siri melancarkan WPS peringkat PC dalam jumlah penuh! Susun atur dan operasi yang sama seperti komputer Xiaomi Mi Pad 6 siri melancarkan WPS peringkat PC dalam jumlah penuh! Susun atur dan operasi yang sama seperti komputer Apr 25, 2024 pm 06:40 PM

Xiaomi Mi Pad 6 siri melancarkan WPS peringkat PC dalam jumlah penuh! Susun atur dan operasi yang sama seperti komputer

Cara menukar pdf deepseek Cara menukar pdf deepseek Feb 19, 2025 pm 05:24 PM

Cara menukar pdf deepseek

Bagaimanakah MathType menambah formula pada persembahan PPT_MathType menambah formula pada persembahan PPT Bagaimanakah MathType menambah formula pada persembahan PPT_MathType menambah formula pada persembahan PPT Apr 23, 2024 pm 01:55 PM

Bagaimanakah MathType menambah formula pada persembahan PPT_MathType menambah formula pada persembahan PPT

Kaedah terperinci merujuk data lembaran kerja Excel dalam dokumen perkataan Kaedah terperinci merujuk data lembaran kerja Excel dalam dokumen perkataan Apr 26, 2024 am 10:28 AM

Kaedah terperinci merujuk data lembaran kerja Excel dalam dokumen perkataan

See all articles