8月 9 2008
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
で、最後にバーコードリーダ処理ソフトを変更する。変更点は以下の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
鎌倉観光 深谷霊園 インターンシップ
8月 9 2008
ruby (thread)
thread処理はとても簡単。b = BCR.newの前に以下を入れ込む。
60秒毎に時間が表示される様になる。ここに鯖へのデータ転送処理を入れ込む事でバーコードリーダからのデータを受信しつつ、データ転送が行える。完成まで後、ちょっと。
鎌倉観光 深谷霊園 インターンシップ
By admin • computer(windows) • 0