SQLの窓

2014年04月03日


VBscript : 新しい Mictrosoft Access(2007以降)へ、古い MDB からデータを移行する


1) 販売管理B.mdb
2) hanbaiB_old2new.vbs


select into from を使用するので、表定義は必要ありませんが、主キー等の定義は後から実行する必要があります。

新しい Microsoft Access に Provider=Microsoft.ACE.OLEDB.12.0 で接続し、SQL 文から直接古い MDB に、in 句を使ってアクセスします。

※ in 句とほぼ同様で、[接続文字列].[テーブル名] でもアクセスが可能です。

新しい Microsoft Access ファイルの作成は、ADOX.Catalog を使って、.Create メソッドを実行するだけです。

hanbaiB_old2new.vbs
' ************************************************
' オブジェクト
' ************************************************
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set Cn = CreateObject( "ADODB.Connection" )
Set Adox = CreateObject( "ADOX.Catalog" )

' ************************************************
' 基本設定
' ************************************************
' このスクリプトが存在するディレクトリを取得
strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )
strMdbPath = strCurDir & "販売管理B.mdb"
strMdbPath2 = strCurDir & "販売管理B.accdb"

' 販売管理B.accdb 削除
on error resume next
Fso.DeleteFile(strMdbPath2)
on error goto 0

strMessage = "対象 MDB は " & strMdbPath & "と" & strMdbPath2 & "です" & vbCrLf & vbCrLf

strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf
strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません"
if vbCancel = MsgBox( strMessage, vbOkCancel ) then
	Wscript.Quit
end if

' ************************************************
' 処理用文字列設定
' ************************************************
' OLEDB.12.0 の接続文字列
strConnect2007 = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strMdbPath2 & ";"

' 販売管理B.accdb 作成
Adox.Create strConnect2007

strConnectMdb = _
" in '' [DATABASE=" & strMdbPath & ";]"

' strConnectMdb = _
' " [DATABASE=" & strMdbPath & ";]" として、
' strConnectMdb & ".[" & strTable & "]" でも良い
' ************************************************
' 初期処理
' ************************************************
Cn.Open strConnect2007

Call AccessTransfer( "コード名称マスタ", Query )
Call AccessTransfer( "コントロールマスタ", Query )
Call AccessTransfer( "メッセージマスタ", Query )
Call AccessTransfer( "取引データ", Query )
Call AccessTransfer( "商品マスタ", Query )
Call AccessTransfer( "商品分類マスタ", Query )
Call AccessTransfer( "得意先マスタ", Query )
Call AccessTransfer( "社員マスタ", Query )
Call AccessTransfer( "郵便番号マスタ", Query )

' ************************************************
' ビュー
' ************************************************
Run2007( "drop view V_商品一覧" )
Query = _
"create view V_商品一覧 as" & _
"	SELECT 商品マスタ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 商品マスタ.販売単価" & _
"	, 商品分類マスタ.商品分類" & _
"	, 商品分類マスタ.名称 AS 分類名" & _
"	, 商品マスタ.商品区分" & _
"	, コード名称マスタ.名称 AS 区分名" & _
" from" & _
"	(商品マスタ LEFT JOIN 商品分類マスタ" & _
"	ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _
"	) LEFT JOIN コード名称マスタ" & _
"	ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _
" where" & _
"	コード名称マスタ.区分 = 3"
Run2007( Query )

Run2007( "drop view V_売上日付" )
Query = _
"create view V_売上日付 as" & _
"	SELECT コントロールマスタ.売上日付" & _
"	FROM コントロールマスタ" & _
"	WHERE コントロールマスタ.キー = '1'"
Run2007( Query )

Run2007( "drop view V_得意先台帳" )
Query = _
"create view V_得意先台帳 as" & _
"	SELECT 取引データ.取引先コード" & _
"	, 得意先マスタ.得意先名" & _
"	, 取引データ.取引日付" & _
"	, 取引データ.取引区分" & _
"	, 取引データ.伝票番号" & _
"	, 取引データ.行" & _
"	, 取引データ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 取引データ.数量" & _
"	, 取引データ.単価" & _
"	, 取引データ.金額" & _
" from" & _
"	(取引データ INNER JOIN 商品マスタ" & _
"	ON 取引データ.商品コード=商品マスタ.商品コード" & _
"	) INNER JOIN 得意先マスタ" & _
"	ON 取引データ.取引先コード=得意先マスタ.得意先コード" & _
" where" & _
"	取引データ.取引区分 = '10'"
Run2007( Query )

Run2007( "drop view V_社員一覧" )
Query = _
"create view V_社員一覧 as" & _
" select 社員コード" & _
"	,氏名" & _
"	,フリガナ" & _
"	,名称1.名称 as 性別" & _
"	,所属" & _
"	,名称2.名称 as 所属名" & _
" from 社員マスタ" & _
"	,コード名称マスタ 名称1" & _
"	,コード名称マスタ 名称2" & _
" where 性別 = Clng(名称1.コード)" & _
"   and 名称1.区分 = 1" & _
"   and 所属 = 名称2.コード" & _
"   and 名称2.区分 = 2"
Run2007( Query )

' ************************************************
' 終了
' ************************************************

Cn.Close

Wscript.Echo "処理が終了しました"

' ************************************************
' OLEDB.12.0へ 転送
' ************************************************
function AccessTransfer( strTable, QueryCreate )

	Dim Query

	Query = "drop table " & strTable
	Run2007( Query )

	Query = "select * into " & strTable & _
	" from " & strTable & strConnectMdb

	Run2007( Query )

end function

' ************************************************
' OLEDB.12.0 実行
' ************************************************
function Run2007( Query )

	on error resume next
	Cn.Execute Query
	if Err.Number <> 0 then
'		Wscript.Echo Err.Description
	end if
	on error goto 0

end function


関連する記事

posted by lightbox at 2014-04-03 19:21 | VBS + ADO | このブログの読者になる | 更新情報をチェックする
container 終わり



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

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