ruby (sqlite3)

やはりcsvファイルでは鯖へ送信したデータの更新がやりにくいって事で、sqlite3を使うことにする。用意するものはsqlite3-ruby-1.2.0-msvcrt-bin.zipと、sqlitedll-3_6_1.zip。sqlite3-rubyは、1.2.2があるみたいだけど、msvcrt版がないのでしょうがない。解凍後、sqllite3-rubyruby install.rbし、sqlitedllはrubyインスコしたbinディレクトリにcopyする。





dbの初期化をしなければいけないので、別に初期化プログラムを作成。

[bcr_initdb.rb]

require 'sqlite3'

db = SQLite3::Database.new("bcr.db").execute_batch(<<-'EOD')

CREATE TABLE BCR01 (

KEYCD INTEGER PRIMARY KEY,

INFO01 VARCHAR(20) NOT NULL,

INFO02 VARCHAR(20) NOT NULL,

INFO03 INTEGER DEFAULT 0

);

EOD



KEYCD 登録番号

INFO01 日時

INFO02 バーコード

INFO03 送信済フラグ(0:未送信・1:送信済)





作成できたらテストしてみる。以下のプログラムはINSERT文をコメントアウトするとテーブルのダンププログラムとして使用できる。

[sqlite.rb]

require 'sqlite3'

db = SQLite3::Database.new('bcr.db')

db.execute("INSERT INTO BCR01 (INFO01, INFO02) VALUES ('2008-08-08 00:00:00', 'xxxxxxxxxxxxx') ");



rc = db.execute("SELECT * FROM BCR01 WHERE INFO03 = 0 ORDER BY KEYCD ");

rc.each do |obj|

p obj

end



で、最後にバーコードリーダ処理ソフトを変更する。変更点は以下の3つ。

require 'fastercsv'



require 'sqlite3'



# CSV write

FasterCSV.open("recv.log", "a") { |csv|

csv << [day.strftime("%Y-%m-%d %H:%M:%S"), @bcd, '0']

}



$db.execute(sprintf("INSERT INTO BCR01 (INFO01, INFO02) VALUES ('%s', '%s') ",day.strftime("%Y-%m-%d %H:%M:%S"), @bcd))



b = BCR.new



$db = SQLite3::Database.new('bcr.db')

b = BCR.new



鎌倉観光 深谷霊園 インターンシップ