■ プログラム名 SQLExpress(SQLServer)用学習用販売管理データ作成 ■ 概要 販売管理B.mdb に格納されている販売管理用のテーブルとビューを SQLExpress(SQLServer) にインポートします ■ 実行方法 1) データベースを前もって作成して下さい 2) hanbaiB_ss.vbs の strDb を作成したデータベース名に変更 3) strPwd を正しいパスワードに変更 4) エクスプローラから、hanbaiB_ss.vbs をダブルクリックして下さい
Crun() ' 別名 または SQLServer のインスタンス文字列を指定します ' インスタンス文字列は、PC名\インスタンス名 ですが、 ' SQLExpress2005 ならば .\SQLEXPRESS で接続できるかもしれません ' ( 別名が確実です ) ' 【以下URLは別名等接続設定参考ページ】 ' http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view&no=228 ' NIGHT_TCP は別名定義です strCon = "NIGHT_TCP" ' ▼ SQLExpress2012 / .\sqlexpress or localhost\sqlexpress or pcname\sqlexpress strCon = ".\sqlexpress" ' データベース ' 事前に create database 文で作成する必要があります ' 上記URLを参考に、sqlcnmd を使って作成します strDb = "lightbox" ' ユーザ ' 上記URLの設定で、sa が有効になります strUser = "sa" ' パスワード ' 上記URLの設定で、パスワードを設定できます strPwd = "passwordpassword" ' 使用する ODBC ドライバです ' SQLServer 2000 より後のバージョンですと、{SQL Native Client} も利用できます ' ODBC アドミニストレータで確認して下さい strDriver = "{SQL Server}" ' strDriver = "{SQL Native Client}" ' ▼ SQLExpress2012 ' strDriver = "{SQL Server Native Client 11.0}" ' ************************************************ ' 基本設定 ' ************************************************ ' このスクリプトが存在するディレクトリを取得 strCurDir = WScript.ScriptFullName strCurDir = Replace( strCurDir, WScript.ScriptName, "" ) strMdbPath = strCurDir & "販売管理B.mdb" strMessage = "対象 MDB は " & strMdbPath & "です" & vbCrLf & vbCrLf strMessage = strMessage & "↓SQLServerの環境です" & vbCrLf strMessage = strMessage & "SERVER : " & strCon & vbCrLf strMessage = strMessage & "DB : " & strDb & vbCrLf strMessage = strMessage & "USER : " & strUser & vbCrLf strMessage = strMessage & "PASS : " & strPwd & vbCrLf & vbCrLf strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません" if vbCancel = MsgBox( strMessage, vbOkCancel ) then Wscript.Quit end if ' ************************************************ ' 処理用文字列設定 ' ************************************************ ' MDB の接続文字列 strConnectMdb = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strMdbPath & ";" strConnectSQLServer = _ " in '' [ODBC;Driver="&strDriver&";SERVER=" & _ strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd & "]" strConnectSQLServer2 = _ "Provider=MSDASQL;Driver="&strDriver&";SERVER=" & _ strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd ' ************************************************ ' 初期処理 ' ************************************************ Set Cn = CreateObject("ADODB.Connection") Set Cn2 = CreateObject("ADODB.Connection") Cn.Open strConnectMdb Cn2.Open strConnectSQLServer2 ' ************************************************ ' コード名称マスタ ' ************************************************ Query = _ "create table コード名称マスタ (" & _ " 区分 INT" & _ " ,コード VARCHAR(10)" & _ " ,名称 NVARCHAR(50)" & _ " ,数値1 INT" & _ " ,数値2 INT" & _ " ,作成日 DATETIME" & _ " ,更新日 DATETIME" & _ " ,primary key(区分,コード)" & _ ")" Call SSTransfer( "コード名称マスタ", Query ) ' ************************************************ ' コントロールマスタ ' ************************************************ Query = _ "create table コントロールマスタ (" & _ " キー VARCHAR(1)" & _ " ,売上日付 DATETIME" & _ " ,売上伝票 INT" & _ " ,primary key(キー)" & _ ")" Call SSTransfer( "コントロールマスタ", Query ) ' ************************************************ ' メッセージマスタ ' ************************************************ Query = _ "create table メッセージマスタ (" & _ " コード VARCHAR(4)" & _ " ,メッセージ NVARCHAR(100)" & _ " ,primary key(コード)" & _ ")" Call SSTransfer( "メッセージマスタ", Query ) ' ************************************************ ' 取引データ ' ************************************************ Query = _ "create table 取引データ (" & _ " 取引区分 VARCHAR(2)" & _ " ,伝票番号 INT" & _ " ,行 INT" & _ " ,取引日付 DATETIME" & _ " ,取引先コード VARCHAR(4)" & _ " ,商品コード VARCHAR(4)" & _ " ,数量 INT" & _ " ,単価 INT" & _ " ,金額 INT" & _ " ,primary key(取引区分,伝票番号,行)" & _ ")" Call SSTransfer( "取引データ", Query ) ' ************************************************ ' 商品マスタ ' ************************************************ Query = _ "create table 商品マスタ (" & _ " 商品コード VARCHAR(4)" & _ " ,商品名 NVARCHAR(50)" & _ " ,在庫評価単価 INT" & _ " ,販売単価 INT" & _ " ,商品分類 VARCHAR(3)" & _ " ,商品区分 VARCHAR(1)" & _ " ,作成日 DATETIME" & _ " ,更新日 DATETIME" & _ " ,primary key(商品コード)" & _ ")" Call SSTransfer( "商品マスタ", Query ) ' ************************************************ ' 商品分類マスタ ' ************************************************ Query = _ "create table 商品分類マスタ (" & _ " 商品分類 VARCHAR(3)" & _ " ,名称 NVARCHAR(50)" & _ " ,作成日 DATETIME" & _ " ,更新日 DATETIME" & _ " ,primary key(商品分類)" & _ ")" Call SSTransfer( "商品分類マスタ", Query ) ' ************************************************ ' 得意先マスタ ' ************************************************ Query = _ "create table 得意先マスタ (" & _ " 得意先コード VARCHAR(4)" & _ " ,得意先名 NVARCHAR(50)" & _ " ,得意先区分 VARCHAR(1)" & _ " ,担当者 VARCHAR(4)" & _ " ,郵便番号 VARCHAR(7)" & _ " ,住所1 NVARCHAR(100)" & _ " ,住所2 NVARCHAR(100)" & _ " ,作成日 DATETIME" & _ " ,更新日 DATETIME" & _ " ,primary key(得意先コード)" & _ ")" Call SSTransfer( "得意先マスタ", Query ) ' ************************************************ ' 社員マスタ ' ************************************************ Query = _ "create table 社員マスタ (" & _ " 社員コード VARCHAR(4)" & _ " ,氏名 NVARCHAR(50)" & _ " ,フリガナ NVARCHAR(50)" & _ " ,所属 VARCHAR(4)" & _ " ,性別 INT" & _ " ,作成日 DATETIME" & _ " ,更新日 DATETIME" & _ " ,給与 INT" & _ " ,手当 INT" & _ " ,管理者 VARCHAR(4)" & _ " ,primary key(社員コード)" & _ ")" Call SSTransfer( "社員マスタ", Query ) ' ************************************************ ' 郵便番号マスタ ' ************************************************ Query = _ "create table 郵便番号マスタ (" & _ " 郵便番号 VARCHAR(7)" & _ " ,都道府県名カナ NVARCHAR(255)" & _ " ,市区町村名カナ NVARCHAR(255)" & _ " ,町域名カナ NVARCHAR(255)" & _ " ,都道府県名 NVARCHAR(255)" & _ " ,市区町村名 NVARCHAR(255)" & _ " ,町域名 NVARCHAR(255)" & _ ")" Call SSTransfer( "郵便番号マスタ", Query ) ' ************************************************ ' ビュー ' ************************************************ RunSS( "drop view V_商品一覧" ) Query = _ "create view V_商品一覧 as" & _ " SELECT 商品マスタ.商品コード" & _ " , 商品マスタ.商品名" & _ " , 商品マスタ.販売単価" & _ " , 商品分類マスタ.商品分類" & _ " , 商品分類マスタ.名称 AS 分類名" & _ " , 商品マスタ.商品区分" & _ " , コード名称マスタ.名称 AS 区分名" & _ " from" & _ " (商品マスタ LEFT JOIN 商品分類マスタ" & _ " ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _ " ) LEFT JOIN コード名称マスタ" & _ " ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _ " where" & _ " コード名称マスタ.区分 = 3" RunSS( Query ) RunSS( "drop view V_売上日付" ) Query = _ "create view V_売上日付 as" & _ " SELECT コントロールマスタ.売上日付" & _ " FROM コントロールマスタ" & _ " WHERE コントロールマスタ.キー = '1'" RunSS( Query ) RunSS( "drop view V_得意先台帳" ) Query = _ "create view V_得意先台帳 as" & _ " SELECT 取引データ.取引先コード" & _ " , 得意先マスタ.得意先名" & _ " , 取引データ.取引日付" & _ " , 取引データ.取引区分" & _ " , 取引データ.伝票番号" & _ " , 取引データ.行" & _ " , 取引データ.商品コード" & _ " , 商品マスタ.商品名" & _ " , 取引データ.数量" & _ " , 取引データ.単価" & _ " , 取引データ.金額" & _ " from" & _ " (取引データ INNER JOIN 商品マスタ" & _ " ON 取引データ.商品コード=商品マスタ.商品コード" & _ " ) INNER JOIN 得意先マスタ" & _ " ON 取引データ.取引先コード=得意先マスタ.得意先コード" & _ " where" & _ " 取引データ.取引区分 = '10'" RunSS( Query ) RunSS( "drop view V_社員一覧" ) Query = _ "create view V_社員一覧 as" & _ " select 社員コード" & _ " ,氏名" & _ " ,フリガナ" & _ " ,名称1.名称 as 性別" & _ " ,所属" & _ " ,名称2.名称 as 所属名" & _ " from 社員マスタ" & _ " ,コード名称マスタ 名称1" & _ " ,コード名称マスタ 名称2" & _ " where 性別 = 名称1.コード" & _ " and 名称1.区分 = 1" & _ " and 所属 = 名称2.コード" & _ " and 名称2.区分 = 2" RunSS( Query ) ' ************************************************ ' 終了 ' ************************************************ Query = "drop table 転送用テーブル" RunSS( Query ) Cn2.Close Cn.Close Wscript.Echo "処理が終了しました" ' ************************************************ ' SQLServer 転送 ' ************************************************ function SSTransfer( strTable, QueryCreate ) Dim Query Query = "drop table " & strTable RunSS( Query ) RunSS( QueryCreate ) Query = "drop table 転送用テーブル" RunSS( Query ) Query = "select * into 転送用テーブル" & strConnectSQLServer & _ " from " & strTable RunMdb( Query ) Query = "insert into " & strTable & _ " select * from 転送用テーブル" RunSS( Query ) end function ' ************************************************ ' MDB 実行 ' ************************************************ function RunMdb( Query ) on error resume next Cn.Execute Query if Err.Number <> 0then Wscript.Echo Err.Description end if on error goto 0 end function ' ************************************************ ' SQLServer 実行 ' ************************************************ function RunSS( Query ) on error resume next Cn2.Execute Query if Err.Number <> 0 then if Query <> "drop table 転送用テーブル" then Wscript.Echo Err.Description end if end if on error goto 0 end function ' ********************************************************** ' Cscript.exe で実行を強制 ' ウィンドウをアクティブにし、最大化ウィンドウとして表示(3) ' Cscript.exe の実行終了後 pause で一時停止 ' ********************************************************** Function Crun( ) Dim str,WshShell str = WScript.FullName str = Right( str, 11 ) str = Ucase( str ) if str <> "CSCRIPT.EXE" then str = WScript.ScriptFullName Set WshShell = CreateObject( "WScript.Shell" ) strParam = " " For I = 0 to Wscript.Arguments.Count - 1 if instr(Wscript.Arguments(I), " ") < 1 then strParam = strParam & Wscript.Arguments(I) & " " else strParam = strParam & Dd(Wscript.Arguments(I)) & " " end if Next Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 3 ) WScript.Quit end if End Function ' ********************************************************** ' 文字列を " で囲む関数 ' ********************************************************** Function Dd( strValue ) Dd = """" & strValue & """" End function
Crun は、Cscript.exe(コマンドプロンプト) で実行を強制する処理です。最後に pause で停止するようになっています。 エクスポートに、in 句を使っていますが、参照構文は以下のようになっています。
strConnectSQLServer = _ " in '' [ODBC;Driver="&strDriver&";SERVER=" & _ strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd & "]"
これは、結構昔からある ODBC テーブルへのリンク用の構文を使用しています。ODBC テーブルを開く接続文字列は、以下の形式を持ちます。 "ODBC; connectstring"
|
【SQLExpressの最新記事】
- SQLServer の BCP で INT IDENTITY 列に csv からリストアする
- VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )
- Microsoft SQLExpress : sa に空のパスワードを設定する方法
- SQLExpress バッチ DB バックアップ
- C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ
- 各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle
- SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )
- SQLExpress 2005( および 2008 ) の接続設定
- SQLExpress 内に存在する表の CREATE 文を取得する
- ファイルから直接データベースを別のPCでリストアする / SQLExpress
- 目的のDBが使用している物理ファイルのパスの確認 / SQLExpress
- ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです
- SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました
- VBS : SQLServerよりExcel へエクスポート(Excel製品は必要ありません)
- SQLServer のドキュメント
- VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する
- PHP : SQLExpress(SQLserver) : COM による接続処理
- PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新
- ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新
- VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理