ruby (sqlite3)

やはりcsvファイルでは鯖へ送信したデータの更新がやりにくいって事で、sqlite3を使うことにする。用意するものはsqlite3-ruby-1.2.0-msvcrt-bin.zipと、sqlitedll-3_6_1.zip。sqlite3-rubyは、1.2.2があるみたいだけど、msvcrt版がないのでしょうがない。解凍後、sqllite3-rubyはruby 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 20080809-b1.jpg
で、最後にバーコードリーダ処理ソフトを変更する。変更点は以下の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 鎌倉観光 深谷霊園 インターンシップ