SQLの窓

2018年04月10日


Eclipse + Ruby : win32ole(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新

前提条件

Eclipse は Pleiades Eclipse 4.7 Oxygen です。前提となる環境は以下を参照して下さい。

Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備
Pleiades Oxygen 2 の XAMPP 内の MySQL を利用可能にしてテストデータ(販売管理)を登録する

▼ プロジェクトの作成方法はこちらを参照して下さい
Pleiades Eclipse 4.7 Oxygen で Ruby を使って MySQL にアクセスする

Connector/ODBC 5.3.10

ADO から接続する場合、純粋に Windows からのアクセスになるので ODBC ドライバが必要になります。Ruby が 64ビットならば、ODBC ドライバも 64ビット用が必要になります。

ダウンロードページ

com_ado_mysql

以下は、ADO + COM で行われる標準的なレコードセットの読み込みと同時更新の処理です。
特徴的なのは、レコードセットの Fields コレクション( Field オブジェクト )を使用して値を直接セットして一行づつレコードを更新するところです。
require 'win32ole'

adOpenDynamic = 2
adLockOptimistic = 3

cn = WIN32OLE.new('ADODB.Connection')
rs = WIN32OLE.new('ADODB.Recordset')

driver = "{MySQL ODBC 5.3 Unicode Driver}"
server = "localhost"
db = "lightbox"
user = "root"
pass = ""

connectionString = "Provider=MSDASQL;Driver=%s;Server=%s;DATABASE=%s;UID=%s;PWD=%s;"
connectionString = format(connectionString, driver,server,db,user,pass)
puts connectionString

# **************************
# 接続
# **************************
begin
	cn.Open( connectionString )
rescue => ex
	print format("%d エラーが発生しました\n%s",ex.errno,ex.error)
	# 接続エラーの場合は終了
	exit!
end

rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open( "select * from 社員マスタ where 社員コード <= '0004' ", cn )

while !rs.EOF do

	line = ""
	rs.Fields.each do |field|
		line << format(" %s |",field.Type)
	end
	line.chop!
	puts line

	line = ""
	rs.Fields.each do |field|
		if field.Type == 202 then
			line << format(" %s |",field.Value)
		end
		if field.Type == 3 then
			# nil 値あり
			line << format(" %s |",field.Value.to_s)
		end
		if field.Type == 135 then
			line << field.Value.strftime(" %Y/%m/%d |")
		end
	end
	line.chop!
	puts line

	print format("%s,",rs.Fields("社員コード").Value)
	print format("%s,",rs.Fields("氏名").Value)
	print format("%s,",rs.Fields("フリガナ").Value)
	print format("%s,",rs.Fields("所属").Value)
	print format("%d,",rs.Fields("性別").Value)
	print format("%d,",rs.Fields("給与").Value)
	if !rs.Fields("手当").Value.nil? then
		print format("%d,",rs.Fields("手当").Value)
	else
		print ","
	end
	print format("%s,",rs.Fields("管理者").Value)
	print rs.Fields("作成日").Value.strftime("%Y/%m/%d,")
	print rs.Fields("更新日").Value.strftime("%Y/%m/%d,")
	print rs.Fields("生年月日").Value.strftime("%Y/%m/%d\n")

	rs.Fields("管理者").Value = "0001"
	rs.Update()

	rs.MoveNext()

end

# **************************
# 接続解除
# **************************
if cn.State >= 1 then
	cn.Close()
end

print("終了しました\n")


CursorTypes, LockTypes, and CursorLocations

※ MySQL は 以下の三つの組み合わせのみ動作
adUseClient/adOpenStatic
adUseServer/adOpenForwardOnly
adUseServer/adOpenDynamic

※ ADO でデフォルトは adUseServer

エディタのタブの設定








タグ:ruby MySQL ODBC
posted by lightbox at 2018-04-10 19:46 | Ruby 2018 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり