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
関連する記事
VBScriptドキュメント
|
【VBS + ADOの最新記事】
- VBScript : Oracle Database Express Edition 11g Release 2 に MDB(販売管理C) のデータをインポートする
- VBScript : PostgreSQL(9.3.4) に MDB(販売管理C) のデータをインポートする
- VBScript : 古い Access2003 までのデータベース作成と新しい Access2007 以降のデータベース作成
- VBScript : ADO で Excel2007(Excel 2010、Excel 2013) にアクセスする( シートをテーブルとして読み込む )
- VBScript : Micrsoft Access 経由で、SQLServer のテーブルのデータを Excel にエクスポートする方法
- VBScript : ADO を使用して、MDB(Access2003) のデータを SQLite ODBC Driver で sqlite3(UTF-8) を作成
- VBScript +ADO / MDB から SQLite3 へ ODBC ドライバを使ってフィールドオブジェクトを使用した同一フォーマットのテーブル間のデータコピー(データベースは自動的に作成されま..
- VBScript : ADO経由の一時PL/SQL でエクスポートを実行する(Data Pump Export)
【VBScript関連のカテゴリ】