SQLの窓

2014年05月08日


VBScript : Oracle Database Express Edition 11g Release 2 に MDB(販売管理C) のデータをインポートする

hanbaic.zip


販売管理C.mdb は、Access2003 以前の形式の Microsoft Access のデータベースですが、Microsoft Office 製品で作成したのでは無く、ADODB.Connection や ADOX.Catalog を使用して Windows の基本機能で作成したものです。



今回、こちらでテストした PostgreSQL の正確なバージョンは、『Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production』です。
※ 実際は、通常の Oracle 11g のインストールされた 10台ほどの Windows7(32ビット) PC でもテストしました

hanbaiC_oracle11g_nvarchar.vbs
' ************************************************
' 管理者権限でコマンドプロンプトで実行を強制して、
' 最後に pause する
' ************************************************
Set Shell = CreateObject("Shell.Application")
Set WshShell = Wscript.CreateObject("WScript.Shell")
if Wscript.Arguments.Count = 0 then
	ScriptFullName = WScript.ScriptFullName
	Shell.ShellExecute "cmd.exe", "/c cscript.exe """ & ScriptFullName & """ dummy_param & pause", "", "runas", 1
	WScript.Quit
end if

' ************************************************
' 基本設定
' Microsoft ODBC for Oracle で実行できます
' DSN を作成して動作確認して指定して下さい
' ( 参考:http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view&no=225&type=ref )
' ************************************************
' このスクリプトが存在するディレクトリを取得
strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )
strMdbPath = strCurDir & "販売管理C.mdb"

' Oracle のホスト文字列
' ( ローカル・ネット・サービス名 )
strTarget = "{Oracle in XE}"	' ODBC ドライバ
strDBQ = "localhost:1521/XE"	' ネット・サービス名として XE のみでも OK
' スキーマ(ユーザ)
strSc = "lightbox"
' パスワード
strPwd = InputBox("パスワードを入力して下さい")

strDummy = "DUMMY" & Replace(Date,"/","") & Replace(Time,":","")

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

strMessage = strMessage & "▼ Oracleの環境です" & vbCrLf
strMessage = strMessage & "ODBC ドライバ : " & strTarget & vbCrLf
strMessage = strMessage & "インスタンス : " & strDBQ & vbCrLf
strMessage = strMessage & "USER(スキーマ) : " & strSc & vbCrLf
strMessage = strMessage & "PASS : " & strPwd & vbCrLf & vbCrLf
strMessage = strMessage & "一時テーブル : " & strDummy & 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 & ";"

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (1)
strConnectOracle = _
"[ODBC;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd & "]"

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (2)
strConnectOracle2 = _
"Provider=MSDASQL;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Set Cn2 = CreateObject("ADODB.Connection")
Cn.Open strConnectMdb
Cn2.Open strConnectOracle2

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	区分 NUMBER(4,0)" & _
"	,コード NVARCHAR2(10)" & _
"	,名称 NVARCHAR2(50)" & _
"	,数値1 NUMBER(8,0)" & _
"	,数値2 NUMBER" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(区分,コード)" & _
")"
Call OracleTransfer( "コード名称マスタ", "[コード名称マスタ]", Query )

' ************************************************
' コントロールマスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	キー NVARCHAR2(1)" & _
"	,売上日付 DATE" & _
"	,売上伝票 NUMBER(8,0)" & _
"	,会社名 NVARCHAR2(50)" & _
"	,組織コード NVARCHAR2(4)" & _
"	,起算月 NUMBER(2,0)" & _
"	,primary key(キー)" & _
")"
Call OracleTransfer( "コントロールマスタ","[コントロールマスタ]", Query )

' ************************************************
' メッセージマスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	コード NVARCHAR2(4)" & _
"	,メッセージ NVARCHAR2(100)" & _
"	,primary key(コード)" & _
")"
Call OracleTransfer( "メッセージマスタ","[メッセージマスタ]", Query )

' ************************************************
' 取引データ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	取引区分 NVARCHAR2(2)" & _
"	,伝票番号 NUMBER(8,0)" & _
"	,行 NUMBER(2,0)" & _
"	,取引日付 DATE" & _
"	,取引先コード NVARCHAR2(4)" & _
"	,商品コード NVARCHAR2(4)" & _
"	,数量 NUMBER" & _
"	,単価 NUMBER" & _
"	,金額 NUMBER" & _
"	,更新済 NVARCHAR2(1)" & _
"	,primary key(取引区分,伝票番号,行)" & _
")"
Call OracleTransfer( "取引データ","[取引データ]", Query )

' ************************************************
' 商品マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品コード NVARCHAR2(4)" & _
"	,商品名 NVARCHAR2(50)" & _
"	,在庫評価単価 NUMBER" & _
"	,販売単価 NUMBER" & _
"	,商品分類 NVARCHAR2(3)" & _
"	,商品区分 NVARCHAR2(1)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,備考 NVARCHAR2(2000)" & _
"	,削除フラグ NVARCHAR2(1)" & _
"	,primary key(商品コード)" & _
")"
Call OracleTransfer( "商品マスタ","[商品マスタ]", Query )

' ************************************************
' 商品分類マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品分類 NVARCHAR2(3)" & _
"	,名称 NVARCHAR2(50)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(商品分類)" & _
")"
Call OracleTransfer( "商品分類マスタ","[商品分類マスタ]", Query )

' ************************************************
' 得意先マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	得意先コード NVARCHAR2(4)" & _
"	,得意先名 NVARCHAR2(50)" & _
"	,得意先区分 NVARCHAR2(1)" & _
"	,担当者 NVARCHAR2(4)" & _
"	,郵便番号 NVARCHAR2(7)" & _
"	,住所1 NVARCHAR2(100)" & _
"	,住所2 NVARCHAR2(100)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,締日 NUMBER(2,0)" & _
"	,締日区分 NUMBER(1,0)" & _
"	,支払日 NUMBER(2,0)" & _
"	,備考 NVARCHAR2(100)" & _
"	,primary key(得意先コード)" & _
")"
Call OracleTransfer( "得意先マスタ","[得意先マスタ]", Query )

' ************************************************
' 社員マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	社員コード NVARCHAR2(4)" & _
"	,氏名 NVARCHAR2(50)" & _
"	,フリガナ NVARCHAR2(50)" & _
"	,所属 NVARCHAR2(4)" & _
"	,性別 NUMBER(1,0)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 NUMBER" & _
"	,手当 NUMBER" & _
"	,管理者 NVARCHAR2(4)" & _
"	,生年月日 DATE" & _
"	,primary key(社員コード)" & _
")"
Call OracleTransfer( "社員マスタ","[社員マスタ]", Query )

' ************************************************
' 郵便番号マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	郵便番号 NVARCHAR2(7)" & _
"	,都道府県名カナ NVARCHAR2(255)" & _
"	,市区町村名カナ NVARCHAR2(255)" & _
"	,町域名カナ NVARCHAR2(255)" & _
"	,都道府県名 NVARCHAR2(255)" & _
"	,市区町村名 NVARCHAR2(255)" & _
"	,町域名 NVARCHAR2(255)" & _
")"
Call OracleTransfer( "郵便番号マスタ","[郵便番号マスタ]", Query )

' ************************************************
' 入金予定データ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	得意先コード NVARCHAR2(4)" & _
"	,支払日 DATE" & _
"	,伝票合計金額 NUMBER(10,0)" & _
"	,伝票番号 NUMBER(10,0)" & _
")"
Call OracleTransfer( "入金予定データ","[入金予定データ]", Query )

' ************************************************
' 商品集計
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品コード NVARCHAR2(4)" & _
"	,経過月 NUMBER(2,0)" & _
"	,当月売上数量 NUMBER(10,0)" & _
"	,当月売上金額 NUMBER(10,0)" & _
"	,更新日 DATE" & _
"	,組織コード NVARCHAR2(4)" & _
"	,primary key(商品コード,経過月)" & _
")"
Call OracleTransfer( "商品集計","[商品集計]", Query )

' ************************************************
' 得意先集計
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	請求先 NVARCHAR2(4)" & _
"	,経過月 NUMBER(2,0)" & _
"	,当月売上金額 NUMBER(10,0)" & _
"	,更新日 DATE" & _
"	,組織コード NVARCHAR2(4)" & _
"	,primary key(請求先,経過月)" & _
")"
Call OracleTransfer( "得意先集計","[得意先集計]", Query )

' ************************************************
' 社員変更履歴
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	社員コード NVARCHAR2(4)" & _
"	,氏名 NVARCHAR2(50)" & _
"	,フリガナ NVARCHAR2(50)" & _
"	,所属 NVARCHAR2(4)" & _
"	,性別 NUMBER(1,0)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 NUMBER" & _
"	,手当 NUMBER" & _
"	,管理者 NVARCHAR2(4)" & _
"	,生年月日 DATE" & _
")"
Call OracleTransfer( "社員変更履歴","[社員変更履歴]", Query )

' ************************************************
' ビュー
' ************************************************
Query = _
"create or replace view V_商品一覧 as" & _
"	SELECT 商品マスタ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 商品マスタ.販売単価" & _
"	, 商品分類マスタ.商品分類" & _
"	, 商品分類マスタ.名称 AS 分類名" & _
"	, 商品マスタ.商品区分" & _
"	, コード名称マスタ.名称 AS 区分名" & _
" from" & _
"	(商品マスタ LEFT JOIN 商品分類マスタ" & _
"	ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _
"	) LEFT JOIN コード名称マスタ" & _
"	ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _
" where" & _
"	コード名称マスタ.区分 = 3 and 削除フラグ is NULL"
RunOracle( Query )

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

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

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

Query = _
"create or replace view" & _
"	PROC_ERROR" & _
" as" & _
" select * " & _
" from USER_ERRORS"
RunOracle( Query )

Query = _
"create or replace view" & _
"	PROC_LIST" & _
" as" & _
" select OBJECT_NAME as ""プロシージャ名"" " & _
"	,STATUS as ""状態""  " & _
"	,OBJECT_TYPE  as ""タイプ"" " & _
"	,CREATED  as ""作成日"" " & _
"	,LAST_DDL_TIME  as ""更新日"" " & _
" from USER_OBJECTS " & _
" where OBJECT_TYPE in ('FUNCTION','PROCEDURE') "
RunOracle( Query )

Query = _
"create or replace view" & _
"	PROC_TEXT" & _
" as" & _
" select * from USER_SOURCE"
RunOracle( Query )

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

Cn2.Close
Cn.Close

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

' ************************************************
' Oracle 転送
' ************************************************
function OracleTransfer( strTarget, strTable, QueryCreate )

	Dim Query

	Query = "drop table " & strTarget
	RunOracle( Query )

	RunOracle( QueryCreate )

	Query = "insert into " & strConnectOracle & "." & strDummy & _
	" select * from " & strTable

	RunMdb( Query )

	Query = "alter table " & strDummy & " rename to " & strTarget
	RunOracle( Query )

end function

' ************************************************
' MDB 実行
' ************************************************
function RunMdb( Query )

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

end function

' ************************************************
' Oracle 実行
' ************************************************
function RunOracle( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function


管理者権限でコマンドプロンプトで実行を強制

この処理では必要ありませんが、昨今いろいろそういう場面に遭遇する事が多く、今後の為にと実装しました。コマンドブロンプトで実行した後は、PAUSE によって処理は一旦停止し、コマンドプロンプトのウインドウは閉じずに残ります。

▼ 管理者実行の確認の後のパスワード入力


▼ 内容の確認ダイアログ


※ 初回実行はテーブルが無いのでエラーメッセージが出ますが、問題はありません

▼ 2回目以降の表示


▼ 実行後のテーブルとビュー



処理手順(1) : テーブル作成

テーブルを CREATE 文を使って、Oracle に接続して実行します。
Oracle ODBC ドライバのパラメータは、『E 26 Oracle ODBC Driverの使用』を参照して下さい。接続文字列そのものは、『8.1 簡易接続ネーミング・メソッドの使用』を参照して下さい。
※ Oracle のマニュアルと言えど、全てが正しく記述されている保証はありません。バージョンの推移やアップデートや現実にドキュメントが全て追いついていない(精査されていない)可能性もあります。
※ 一般の Oracle で簡易接続ネーミング・メソッドが使え無い場合は、Net Configuration Assistant のネーミングメソッド構成で追加して下さい
※ Oracle の基本情報は、select * from V$PARAMETER を実行した内容と、レジストリの内容を確認するとたいていは得られるはずです。
' Oracle のホスト文字列
' ( ローカル・ネット・サービス名 )
strTarget = "{Oracle in XE}"	' ODBC ドライバ
strDBQ = "localhost:1521/XE"	' ネット・サービス名として XE のみでも OK
' スキーマ(ユーザ)
strSc = "lightbox"
' パスワード
strPwd = InputBox("パスワードを入力して下さい")

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (2)
strConnectOracle2 = _
"Provider=MSDASQL;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd


処理手順(2) : インポート

現実には、MDB へ接続して行うエクスポート処理となります。Microsoft Access では、in 構文によって、Access 内から ODBC を使って直接他のデータベースのテーブルを内部デーブルのように参照できるので、
insert into [Oracleのテーブル] select * from [MDB内のテーブル] というSQL文を実行してエクスポートが可能です。

但し、Oracle の ODBC ドライバは バグ(?) があるらしく、複数のスキーマに同一名のテーブルがあるとエラーになるので(バグと言うより、他の DB と構造が違う為)、毎回ダミーのテーブルを作成してインポートして名前変更しています。
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectOracle = _
"[ODBC;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd & "]"


処理手順(3) : VIEW作成

VIEW の作成は、Oracle への接続で行います


関連する記事


posted by lightbox at 2014-05-08 21:20 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

VBScript : PostgreSQL(9.3.4) に MDB(販売管理C) のデータをインポートする

hanbaic_postgreSQL.zip


販売管理C.mdb は、Access2003 以前の形式の Microsoft Access のデータベースですが、Microsoft Office 製品で作成したのでは無く、ADODB.Connection や ADOX.Catalog を使用して Windows の基本機能で作成したものです。



今回、こちらでテストした PostgreSQL の正確なバージョンは、『PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit』です。

hanbaiC_postgres.vbs
' ************************************************
' 管理者権限でコマンドプロンプトで実行を強制して、
' 最後に pause する
' ************************************************
Set Shell = CreateObject("Shell.Application")
Set WshShell = Wscript.CreateObject("WScript.Shell")
if Wscript.Arguments.Count = 0 then
	ScriptFullName = WScript.ScriptFullName
	Shell.ShellExecute "cmd.exe", "/c cscript.exe """ & ScriptFullName & """ dummy_param & pause", "", "runas", 1
	WScript.Quit
end if

' ************************************************
' 基本設定
' ************************************************
' このスクリプトが存在するディレクトリを取得
Set Fso = CreateObject( "Scripting.FileSystemObject" )
strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurDir = obj.Path
strMdbPath = strCurDir & "\販売管理C.mdb"

strTarget = "{PostgreSQL ODBC Driver(UNICODE)}"	' ODBC ドライバ
strServer = "localhost"
strPort = "5432"
strDB = "lightbox"
strUser = "postgres"
strPass = InputBox("パスワードを入力して下さい")


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

strMessage = strMessage & "▼ PostgreSQLの環境です" & vbCrLf
strMessage = strMessage & "ODBC ドライバ : " & strTarget & vbCrLf
strMessage = strMessage & "Server : " & strServer & vbCrLf
strMessage = strMessage & "Port : " & strPort & vbCrLf
strMessage = strMessage & "DB : " & strDB & vbCrLf
strMessage = strMessage & "USER : " & strUser & vbCrLf
strMessage = strMessage & "PASS : " & strPass & 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 & ";"

strConnectPS = _
	" in '' [ODBC" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";]" 

strConnectPS2 = _
	"Provider=MSDASQL" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Set Cn2 = CreateObject("ADODB.Connection")
Cn.Open strConnectMdb
Cn2.Open strConnectPS2

RunSS( "drop view V_商品一覧" )
RunSS( "drop view V_売上日付" )
RunSS( "drop view V_得意先台帳" )
RunSS( "drop view V_社員一覧" )

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table コード名称マスタ (" & _
"	区分 INT" & _
"	,コード VARCHAR(10)" & _
"	,名称 VARCHAR(50)" & _
"	,数値1 INT" & _
"	,数値2 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(区分,コード)" & _
")"
Call SSTransfer( "コード名称マスタ", Query )

' ************************************************
' コントロールマスタ
' ************************************************
Query = _
"create table コントロールマスタ (" & _
"	キー VARCHAR(1)" & _
"	,売上日付 DATE" & _
"	,売上伝票 INT" & _
"	,会社名 VARCHAR(50)" & _
"	,組織コード VARCHAR(4)" & _
"	,起算月 INT" & _
"	,primary key(キー)" & _
")"
Call SSTransfer( "コントロールマスタ", Query )

' ************************************************
' メッセージマスタ
' ************************************************
Query = _
"create table メッセージマスタ (" & _
"	コード VARCHAR(4)" & _
"	,メッセージ VARCHAR(100)" & _
"	,primary key(コード)" & _
")"
Call SSTransfer( "メッセージマスタ", Query )

' ************************************************
' 取引データ
' ************************************************
Query = _
"create table 取引データ (" & _
"	取引区分 VARCHAR(2)" & _
"	,伝票番号 INT" & _
"	,行 INT" & _
"	,取引日付 DATE" & _
"	,取引先コード VARCHAR(4)" & _
"	,商品コード VARCHAR(4)" & _
"	,数量 INT" & _
"	,単価 INT" & _
"	,金額 INT" & _
"	,更新済 VARCHAR(1)" & _
"	,primary key(取引区分,伝票番号,行)" & _
")"
Call SSTransfer( "取引データ", Query )

' ************************************************
' 商品マスタ
' ************************************************
Query = _
"create table 商品マスタ (" & _
"	商品コード VARCHAR(4)" & _
"	,商品名 VARCHAR(50)" & _
"	,在庫評価単価 INT" & _
"	,販売単価 INT" & _
"	,商品分類 VARCHAR(3)" & _
"	,商品区分 VARCHAR(1)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,備考 VARCHAR(2000)" & _
"	,削除フラグ VARCHAR(1)" & _
"	,primary key(商品コード)" & _
")"
Call SSTransfer( "商品マスタ", Query )

' ************************************************
' 商品分類マスタ
' ************************************************
Query = _
"create table 商品分類マスタ (" & _
"	商品分類 VARCHAR(3)" & _
"	,名称 VARCHAR(50)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(商品分類)" & _
")"
Call SSTransfer( "商品分類マスタ", Query )

' ************************************************
' 得意先マスタ
' ************************************************
Query = _
"create table 得意先マスタ (" & _
"	得意先コード VARCHAR(4)" & _
"	,得意先名 VARCHAR(50)" & _
"	,得意先区分 VARCHAR(1)" & _
"	,担当者 VARCHAR(4)" & _
"	,郵便番号 VARCHAR(7)" & _
"	,住所1 VARCHAR(100)" & _
"	,住所2 VARCHAR(100)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,締日 INT" & _
"	,締日区分 INT" & _
"	,支払日 INT" & _
"	,備考 VARCHAR(100)" & _
"	,primary key(得意先コード)" & _
")"
Call SSTransfer( "得意先マスタ", Query )

' ************************************************
' 社員マスタ
' ************************************************
Query = _
"create table 社員マスタ (" & _
"	社員コード VARCHAR(4)" & _
"	,氏名 VARCHAR(50)" & _
"	,フリガナ VARCHAR(50)" & _
"	,所属 VARCHAR(4)" & _
"	,性別 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 INT" & _
"	,手当 INT" & _
"	,管理者 VARCHAR(4)" & _
"	,生年月日 DATE" & _
"	,primary key(社員コード)" & _
")"
Call SSTransfer( "社員マスタ", Query )

' ************************************************
' 郵便番号マスタ
' ************************************************
Query = _
"create table 郵便番号マスタ (" & _
"	郵便番号 VARCHAR(7)" & _
"	,都道府県名カナ VARCHAR(255)" & _
"	,市区町村名カナ VARCHAR(255)" & _
"	,町域名カナ VARCHAR(255)" & _
"	,都道府県名 VARCHAR(255)" & _
"	,市区町村名 VARCHAR(255)" & _
"	,町域名 VARCHAR(255)" & _
")"
Call SSTransfer( "郵便番号マスタ", Query )

' ************************************************
' 入金予定データ
' ************************************************
Query = _
"create table 入金予定データ (" & _
"	得意先コード VARCHAR(4)" & _
"	,支払日 DATE" & _
"	,伝票合計金額 INT" & _
"	,伝票番号 INT" & _
")"
Call SSTransfer( "入金予定データ", Query )

' ************************************************
' 商品集計
' ************************************************
Query = _
"create table 商品集計 (" & _
"	商品コード VARCHAR(4)" & _
"	,経過月 INT" & _
"	,当月売上数量 INT" & _
"	,当月売上金額 INT" & _
"	,更新日 DATE" & _
"	,組織コード VARCHAR(4)" & _
"	,primary key(商品コード,経過月)" & _
")"
Call SSTransfer( "商品集計", Query )

' ************************************************
' 得意先集計
' ************************************************
Query = _
"create table 得意先集計 (" & _
"	請求先 VARCHAR(4)" & _
"	,経過月 INT" & _
"	,当月売上金額 INT" & _
"	,更新日 DATE" & _
"	,組織コード VARCHAR(4)" & _
"	,primary key(請求先,経過月)" & _
")"
Call SSTransfer( "得意先集計", Query )

' ************************************************
' 社員変更履歴
' ************************************************
Query = _
"create table 社員変更履歴 (" & _
"	社員コード VARCHAR(4)" & _
"	,氏名 VARCHAR(50)" & _
"	,フリガナ VARCHAR(50)" & _
"	,所属 VARCHAR(4)" & _
"	,性別 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 INT" & _
"	,手当 INT" & _
"	,管理者 VARCHAR(4)" & _
"	,生年月日 DATE" & _
")"
Call SSTransfer( "社員変更履歴", Query )

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

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

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

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

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

Cn2.Close
Cn.Close

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

' ************************************************
' PS 転送
' ************************************************
function SSTransfer( strTable, QueryCreate )

	Dim Query

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

	RunSS( QueryCreate )

	Query = "insert into " & strTable & " " & strConnectPS & _
	" select * from " & strTable
	RunMdb( Query )

end function

' ************************************************
' MDB 実行
' ************************************************
function RunMdb( Query )

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

end function

' ************************************************
' PS 実行
' ************************************************
function RunSS( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function


管理者権限でコマンドプロンプトで実行を強制

この処理では必要ありませんが、昨今いろいろそういう場面に遭遇する事が多く、今後の為にと実装しました。コマンドブロンプトで実行した後は、PAUSE によって処理は一旦停止し、コマンドプロンプトのウインドウは閉じずに残ります。

▼ 管理者実行の確認の後のパスワード入力


▼ 内容の確認ダイアログ


▼ 初回実行はテーブルが無いのでエラーメッセージが出ますが、問題はありません


▼ 2回目以降の表示


▼ 実行後のテーブルとビュー



処理手順(1) : テーブル作成

テーブルを CREATE 文を使って、Postgres に接続して実行します。
strConnectPS2 = _
	"Provider=MSDASQL" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 


処理手順(2) : インポート

現実には、MDB へ接続して行うエクスポート処理となります。Microsoft Access では、in 構文によって、Access 内から ODBC を使って直接他のデータベースのテーブルを内部デーブルのように参照できるので、
insert into [PostgreSQLのテーブル] select * from [MDB内のテーブル] というSQL文を実行してエクスポートが可能です。
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectPS = _
	" in '' [ODBC" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";]" 


処理手順(3) : VIEW作成

VIEW の作成は、PostgreSQL への接続で行います


関連する記事


posted by lightbox at 2014-05-08 15:32 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

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 | このブログの読者になる | 更新情報をチェックする

VBScript : 古い Access2003 までのデータベース作成と新しい Access2007 以降のデータベース作成

古いアプリケーションは、Microsoft.Jet.OLEDB.4.0 を使っているはずなので、作成時も同じプロバイダで作成する必要があります。新しいアプリケーションは、古いタイプでもアクセスできると思いますが、厳密に新しいタイプで作成するには、Microsoft.ACE.OLEDB.12.0 を使用します

▼ 参考資料
ダウンロード詳細 2007 Office system ドライバ: データ接続コンポーネント
ダウンロード詳細 Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
Dim Fso,obj,strCurPath,FileName

' ファイルシステムオブジェクト
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' 現在実行されているスクリプトのフルパス
strCurPath = WScript.ScriptFullName

' ファイルオブジェクトを作成
Set obj = Fso.GetFile( strCurPath )

' ファイルオブジェクトが存在するフォルダオブジェクト
Set obj = obj.ParentFolder

' そのフォルダのフルパス
strCurPath = obj.Path


' 古い Access2003 までのデータベースを作成
FileName = "Access2003.mdb"

Set Adox = CreateObject( "ADOX.Catalog" )

on error resume next
Adox.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	"Data Source=" & strCurPath & "\" & FileName & ";"
on error goto 0


' 新しい Access2007 以降のデータベースを作成
FileName = "Access2007.accdb"

on error resume next
Adox.Create "Provider=Microsoft.ACE.OLEDB.12.0;" & _
	"Data Source=" & strCurPath & "\" & FileName & ";"
on error goto 0



関連する記事

タグ:access
posted by lightbox at 2014-04-03 15:58 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

VBScript : ADO で Excel2007(Excel 2010、Excel 2013) にアクセスする( シートをテーブルとして読み込む )

Excel2007(Excel 12.0) と Excel2010 と Excel2013で確認しました。
※ Excel 2010 は、Excel 14.0 だそうですが、接続文字列は Excel 12.0 でのみ動作しました。

Excel 2013(Windows8) では、Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをダウンロードしてインストールする必要があります。( ※参考1※参考2 )


( 32ビット版と64ビット版があるので選択してダウンロードします )


IMEX=1 : 概要としては、予期しない列の値の変化を抑制してくれます。仕様的には、「intermixed」で、データ行を常にテキストとして読み取ることをドライバーに指示しています。こちらを参照して下さい

関連する Microsoft ドキュメント
[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する

コマンドプロンプトで、カレントに Book1.xlsx を置いて、cscript.exe excel_ado.vbs でテストします

excel_ado.vbs
' *******************************************
' オブジェクト作成
' *******************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )

' *******************************************
' スクリプトがあるディレクトリ
' *******************************************
' ファイルシステムオブジェクト
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' 現在実行されているスクリプトのフルパス
strCurPath = WScript.ScriptFullName

' スクリプトのファイルオブジェクトを作成
Set obj = Fso.GetFile( strCurPath )

' スクリプトファイルトが存在するフォルダオブジェクト
Set obj = obj.ParentFolder

' そのフォルダのフルパス
strCurPath = obj.Path

' *******************************************
' 接続用の文字列を準備
' *******************************************
' 2007 以降の Excel 
FileName = "Book1.xlsx"
' 接続文字列
ConnectionString = _
	"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strCurPath & "\" & FileName & ";" & _
	"Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"""

' HDR=YES にすると、一行目が列名になります。
' HDR=NO の場合は、F1,F2,F3,F4,F5,F6,F7,F8,F9,F10 となっています

' *******************************************
' 接続
' *******************************************
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' *******************************************
' レコードセット取得
' *******************************************
Query = "select * from [Sheet1$]"
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' *******************************************
' タイトル出力
' *******************************************
Buffer = ""
For i = 0 to Rs.Fields.Count - 1
	if Buffer <> "" then
		Buffer = Buffer & ","
	end if
	Buffer = Buffer & Rs.Fields(i).Name
Next
Wscript.echo Buffer & vbCrLf

' *******************************************
' データ出力
' *******************************************
Do While not Rs.EOF
	Buffer = ""
	For i = 0 to Rs.Fields.Count - 1
		if Buffer <> "" then
			Buffer = Buffer & ","
		end if
		Buffer = Buffer & Rs.Fields(i).Value
	Next
	Wscript.echo Buffer
	Rs.MoveNext
Loop

' *******************************************
' レコードセットクローズ
' *******************************************
Rs.Close

' *******************************************
' 接続解除
' *******************************************
Cn.Close

' *******************************************
' オブジェクト解放
' *******************************************
Set Rs = Nothing
Set Cn = Nothing



▼ 新旧接続文字列の比較( SQLServer の OPENDATASOURCE 関数による Excel の参照 )
select * from
OPENDATASOURCE(
	'Microsoft.Jet.OLEDB.4.0',
	'Data Source="C:\user\data\商品.xls";Extended properties=Excel 8.0'
)...[Sheet1$]

select * from
OPENDATASOURCE(
	'Microsoft.ACE.OLEDB.12.0',
	'Data Source="C:\user\data\商品.xlsx";Extended properties=Excel 12.0'
)...[Sheet1$]


関連する Mocrosodt ドキュメント

Access 2010 を使用したデータ プログラミング

関連する記事

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

VBScript : Micrsoft Access 経由で、SQLServer のテーブルのデータを Excel にエクスポートする方法

SQLServer は、SQLExpress を使用しています。古い環境からの移行なので、sa のパスワードは空になっています。

エクスポートする為に、Microsoft Access の select into 〜 from 〜 を使用し、SQLServer への接続は、動的に SQL 内で接続文字を作成して使用しています。SQLServer への接続部分は、『mypc\sqlexpress,1433』で、ポートが必要で、サーバー側の設定も必要です。別名を使う方法もありますが、SQLServer 構成用のソフトウェアをインストールしていないクライアントでは、レジストリに登録する必要があるので、この方法(mypc\sqlexpress,1433)が良いと思います。

Office 2003 までで動作する互換処理
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set Cn = CreateObject( "ADODB.Connection" )
Set Adox = CreateObject( "ADOX.Catalog" )
Set Shell = CreateObject( "Shell.Application" )

SelectDir = "C:\user\lightbox\vbs"

' Excel 削除
on error resume next
Fso.DeleteFile(SelectDir & "\エクスポート.xls")
on error goto 0

' ユーザーフォルダ( C:\Users\ユーザ名 )
Set objFolder = Shell.Namespace(&H28)
Set objFolderItem = objFolder.Self

' XP の場合の為、( Windows7 でもシステムが対応してくれます )
strPath = objFolderItem.Path & "\Local Settings\Temp\dummy.mdb"

' 一時 Microsoft Access の削除
on error resume next
Fso.DeleteFile(strPath)
on error goto 0

' 接続文字列
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strPath & ";"

' 一時 Microsoft Access 作成
Adox.Create ConnectionString

' 作成した Microsoft Access に接続
Cn.Open ConnectionString

' V_EXCELOUT は、SQLExpress のビュー

Query = "select * "
Query = Query & "into [Excel 8.0;DATABASE=" & SelectDir & "\エクスポート.xls].[社員データ] "
Query = Query & " from [ODBC;Driver={SQL Server};SERVER=mypc\sqlexpress,1433;Database=mydb;UID=sa;PWD=].[V_EXCELOUT]"
Query = Query & "  WHERE 年度 = '2013' and コード = '0001'"
Query = Query & "  ORDER BY V_EXCELOUT.ふりがな"

Cn.Execute Query
Call Cn.Close()

MsgBox("処理が終了しました")


ここでの環境は Office 2007 です
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set Cn = CreateObject( "ADODB.Connection" )
Set Adox = CreateObject( "ADOX.Catalog" )
Set Shell = CreateObject( "Shell.Application" )

SelectDir = "C:\user\lightbox\vbs"

' Excel 削除
on error resume next
Fso.DeleteFile(SelectDir & "\エクスポート.xlsx")
on error goto 0

' ユーザーフォルダ( C:\Users\ユーザ名 )
Set objFolder = Shell.Namespace(&H28)
Set objFolderItem = objFolder.Self

' XP の場合の為、( Windows7 でもシステムが対応してくれます )
strPath = objFolderItem.Path & "\Local Settings\Temp\dummy.accdb"

' 一時 Microsoft Access の削除
on error resume next
Fso.DeleteFile(strPath)
on error goto 0

' 接続文字列
ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & strPath & ";"

' 一時 Microsoft Access 作成
Adox.Create ConnectionString

' 作成した Microsoft Access に接続
Cn.Open ConnectionString

' V_EXCELOUT は、SQLExpress のビュー

Query = "select * "
Query = Query & "into [Excel 12.0 Xml;DATABASE=" & SelectDir & "\エクスポート.xlsx].[社員データ] "
Query = Query & " from [ODBC;Driver={SQL Server};SERVER=mypc\sqlexpress,1433;Database=mydb;UID=sa;PWD=].[V_EXCELOUT]"
Query = Query & "  WHERE 年度 = '2013' and コード = '0001'"
Query = Query & "  ORDER BY V_EXCELOUT.ふりがな"

Cn.Execute Query
Call Cn.Close()

MsgBox("処理が終了しました")


関連する記事

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

2014年04月01日


VBScript : ADO を使用して、MDB(Access2003) のデータを SQLite ODBC Driver で sqlite3(UTF-8) を作成

SQLite ODBC Driver と ADO で普通に、sqlite3 内に UTF-8 のデータを作成して、PHP からも普通に UTF-8 としてアクセスする事ができます。

4年前の ODBC ドライバでは、Unicode で作成されていたようなのですが、今回データベース内を見ると、UTF-8の日本語データが入っていました。しかし、OpenSchema 経由では相変わらずテーブル名と列名は内部形式のまま返されてしまうので、列名であればフィールドオブジェクトを使って取り出せると思います。テーブル名は、sqlite_master を表として呼び出せば、一覧を取得できます。



▼ 解凍すると以下のファイルが入っていますが、db1.sqlite3 をそのまま使えます。
1) 作成済みデータベース : db1.sqlite3 
2) MDB から変換するスクリプト : hanbaiB_sqlite.vbs
3) 表名を英数字に変更するスクリプト : hanbaiB_sqlite_rename.vbs
4) 元データとなるMDB : 販売管理B.mdb

hanbaiB_sqlite.vbs
Crun()


' 使用する ODBC ドライバです
strDriver = "{SQLite3 ODBC Driver}"


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

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

strMessage = strMessage & "↓SQLiteの環境です" & vbCrLf
strMessage = strMessage & "DB : " & strSQLite3Path & 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 & ";"

strConnectSQLite3 = _
"Provider=MSDASQL;Driver="&strDriver&";DATABASE=" & strSQLite3Path & ";"

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Cn.CursorLocation = 3
Set Rs = CreateObject( "ADODB.Recordset" )

Set Cn2 = CreateObject("ADODB.Connection")
Cn2.CursorLocation = 3
Set Rs2 = CreateObject( "ADODB.Recordset" )
Rs2.LockType = 3

Cn.Open strConnectMdb
Cn2.Open strConnectSQLite3

' ************************************************
' コード名称マスタ
' ************************************************
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 )

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

Cn2.Close
Cn.Close

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

' ************************************************
' SQLServer 転送
' ************************************************
function SSTransfer( strTable, QueryCreate )

	Wscript.Echo strTable & " の作成を開始します"

	Dim Query

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

	RunSS( QueryCreate )

	Query = "select * from " & strTable
	Rs.Open Query, Cn
	Rs2.Open Query, Cn2

	nCount = Rs.Fields.Count
	Do While not Rs.EOF
		Rs2.AddNew

		For I = 0 to nCount - 1
			Rs2.Fields(I).Value = Rs.Fields(I).value
		Next
		Rs2.Update

		' 更新
		Rs.MoveNext
	Loop

	Rs2.Close
	Rs.Close

	Wscript.Echo strTable & " の作成が終了しました"

end function

' ************************************************
' SQLLite 実行
' ************************************************
function RunSS( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0 then
		Wscript.Echo Err.Description
	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

関連する記事

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

2014年03月31日


VBScript +ADO / MDB から SQLite3 へ ODBC ドライバを使ってフィールドオブジェクトを使用した同一フォーマットのテーブル間のデータコピー(データベースは自動的に作成されます)

概要

ADO で昔からよく使われる常套手段です。

件数が多いと結構時間がかかるので、そのような処理には向いていません。現在のレコードを同様のフォーマットのログテーブル等へコピーするような一回に数十件の処理に向いています

▼ 販売管理B( hanbaib.zip )


ODBC ドライバを SQLite ODBC Driver からダウンロードしてこのデータを使って、VBScript を実行(DBのパスはご自分の環境に合わせて正しく変更して下さい)するだけで、SQLite3 のデータベースを作成する事ができます。

表名と列名を日本語のままでも作成して、SQL でアクセスできますが、ADO を使ってテーブル名を取得すると化けるので英数字に変更しています。作成後は、ODBCアドミニストレータで DSN を作成すれば、一般的な ODBC 経由のソフトウェアでアクセスが可能になります。

▼ 重要
SQLite ODBC Driver は、VBScript 上の SHIFT_JIS 環境から実行して、SQLite 内に UTF-8 のデータを保存します。VBScript(SHIFT_JIS) からの ADO の通常テーブルアクセスは正しく変換して実行してくれますが、ADO の OpenSchema経由で表名や列名を取得しようとすると、SHIFT_JIS へ戻さないというバグがあります。
内部確認用ツール VBScript + ADO : 汎用CSV出力 ▼ DSN 登録 出力結果
kubun,code,name,num1,num2,create_date,update_date
1,0,男,10,10,2004/05/05,2004/05/05
1,1,女,11,12,2004/05/05,2004/05/05
2,0001,営業部第一,0,0,2004/05/05,2004/05/05
2,0002,営業部第ニ,0,0,2004/05/05,2004/05/05
2,0003,営業部第三,0,0,2004/05/05,2004/05/05
3,0,通常,0,0,2004/06/23,2004/06/23
3,1,特別,0,0,2004/06/23,2004/06/23
4,0,通常,0,0,2004/06/23,2004/06/23
4,1,特別,0,0,2004/06/23,2004/06/23
5,A,食品,0,0,2004/06/23,2004/06/23
5,B,装飾,0,0,2004/06/23,2004/06/23
5,D,衣類,0,0,2004/06/23,2004/06/23
5,G,娯楽,0,0,2004/06/23,2004/06/23
5,K,家庭一般,0,0,2004/06/23,2004/06/23
5,M,薬,0,0,2004/06/23,2004/06/23
5,P,パソコン,0,0,2004/06/23,2004/06/23
5,Z,雑貨,0,0,2004/06/23,2004/06/23


' 使用する ODBC ドライバです
strDriver = "{SQLite3 ODBC Driver}"

' ************************************************
' 処理用文字列設定
' ************************************************
' MDB の接続文字列
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\user\lightbox\sqlite3\hanbaib\販売管理B.mdb;"
strConnectSQLite3 = _
"Provider=MSDASQL;Driver="&strDriver&";DATABASE=C:\user\lightbox\sqlite3\hanbaib\db1.sqlite3;"

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Cn.CursorLocation = 3
Set Rs = CreateObject( "ADODB.Recordset" )

Set Cn2 = CreateObject("ADODB.Connection")
Cn2.CursorLocation = 3
Set Rs2 = CreateObject( "ADODB.Recordset" )
Rs2.LockType = 3	' 更新用レコードセット

Cn.Open strConnectMdb
Cn2.Open strConnectSQLite3

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table code_name (" & _
"	kubun INT" & _
"	,code VARCHAR(10)" & _
"	,name NVARCHAR(50)" & _
"	,num1 INT" & _
"	,num2 INT" & _
"	,create_date DATETIME" & _
"	,update_date DATETIME" & _
"	,primary key(kubun,code)" & _
")"
Call SSTransfer( "code_name", Query )

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

Cn2.Close
Cn.Close

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

' ************************************************
' SQLLite 転送
' ************************************************
function SSTransfer( strTable, QueryCreate )

	Wscript.Echo strTable & " の作成を開始します"

	Dim Query

	' まず既存テーブルを削除
	Query = "drop table " & strTable
	RunSS( Query )

	' CREATE 文でテーブル作成
	RunSS( QueryCreate )

	' MDB 側はすべてのレコード
	' SQLite 側は空
	Query = "select * from " & strTable
	Rs.Open "select * from コード名称マスタ", Cn
	Rs2.Open Query, Cn2

	' フィールド数
	nCount = Rs.Fields.Count
	Do While not Rs.EOF

		' SQLite 側に新しいレコードバッファを作成
		Rs2.AddNew

		' 同一フォーマットなのでフィールド番号でループ
		For I = 0 to nCount - 1
			' 対応するデータを MDB から SQLite へコピー
			Rs2.Fields(I).Value = Rs.Fields(I).value
		Next
		' SQLite の更新
		Rs2.Update

		' MDB を次のレコードへ
		Rs.MoveNext
	Loop

	' レコードセットを閉じる
	Rs2.Close
	Rs.Close

	Wscript.Echo strTable & " の作成が終了しました"

end function

' ************************************************
' SQLLite 実行
' ************************************************
function RunSS( Query )

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

end function


以下は簡単に更新する為に SQLの窓 Build C++ を使っての手順です。

Excel の接続ダイアログ

DSN を作成した後、Excel の接続ダイアログにある『他のDSN』に入力します。



更新用のキーを設定

テーブル名をダブルクリックすると、データ処理用のウインドウが開くので更新用のキーを設定します。この処理では、ODBC 一般用なので、ウインドウを開くたびにキーの設定がその都度必要です。



入力した後更新できます




関連する記事

posted by lightbox at 2014-03-31 20:43 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

2010年06月14日


VBScript : ADO経由の一時PL/SQL でエクスポートを実行する(Data Pump Export)

ADO では、一時PL/SQL 内の結果を取得する事ができませんが、OO4O を使用すると可能になります。

関連する記事

OO4O : 一時PL/SQLを実行して、DBMS_OUTPUT の結果を取得する
PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
PL/SQL で エクスポート
<JOB>
<COMMENT>
*******************************
■ Data Pump Export

*******************************
</COMMENT>

<OBJECT id="Cn" progid="ADODB.Connection" />

<SCRIPT language=VBScript>
' *******************************
' 処理開始
' *******************************
' ソース内テキストデータの取得
strPLSQL = RegTrim(GetResource("myTextData"))

' GUI 
if vbCancel = MsgBox( "実行しますか?   ", vbOKCancel , "Data Pump Export" ) then
	Wscript.Echo "キャンセルされました"
end if


strDriver = "{Microsoft ODBC for Oracle}"
strServer = "night/xe"
strUser = "lightbox"
strPass = "lightbox"

ConnectionString = _
	"Provider=MSDASQL" & _
	";Driver=" & strDriver & _
	";Server=" & strServer & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 

on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Cn.Execute( strPLSQL )

Cn.Close

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

' *******************************
' 文字列前後の漢字スペースを含
' むホワイトスペースの削除
' *******************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>

<COMMENT>
*******************************
 ソース内テキストデータ
*******************************
</COMMENT>
<RESOURCE id="myTextData">
<![CDATA[
DECLARE 

/*******************************/
/* 変数の定義 */
/*******************************/
	J_HANDLE NUMBER;
	J_STS VARCHAR2(20);
/*******************************/
/* 処理開始 */
/*******************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');

	/***************************/
	/* OPEN */
	/***************************/
	J_HANDLE := DBMS_DATAPUMP.OPEN(
		'EXPORT'
		,'TABLE'
		,NULL
		,NULL
		,'COMPATIBLE'
		,DBMS_DATAPUMP.KU$_COMPRESS_METADATA
	);

	/***************************/
	/* 出力ファイル */
	/***************************/
	DBMS_DATAPUMP.ADD_FILE(
		J_HANDLE
		,'EXP20100614.DMP'
		,'R205'
		,NULL
		,DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE
	);

	/***************************/
	/* SQL 式で スキーマを指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'SCHEMA_EXPR'
		,'IN (''LIGHTBOX'')'
	);

	/***************************/
	/* SQL 式で 表を指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'NAME_EXPR'
		,'IN (''商品マスタ'')'
	);

	/***************************/
	/* データを出力しない */
	/***************************/
	DBMS_DATAPUMP.DATA_FILTER (
		J_HANDLE
		,'INCLUDE_ROWS'
		,0 /* 1 で出力 */
	);

	/***************************/
	/* 開始 */
	/***************************/
	DBMS_DATAPUMP.START_JOB(
		J_HANDLE
		,0
	);

	/***************************/
	/* JOB 終了まで待機 */
	/***************************/
	DBMS_DATAPUMP.WAIT_FOR_JOB(
		J_HANDLE
		,J_STS
	);

	/***************************/
	/* 終了ステータスの表示 */
	/***************************/
	DBMS_OUTPUT.PUT_LINE('処理終了:'||J_STS);

/*******************************/
/* 一番外側のブロックの例外処理 */
/*******************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
]]>
</RESOURCE>

</JOB>



タグ:Oracle PL/SQL
posted by lightbox at 2010-06-14 20:36 | VBS + ADO | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり