rpxファイルをDBへインポートする
ActiveReportsのrpxファイルを、データベースにインポートするVBScript
UTF-8のリソースファイルをDBにインポートするときのテンプレ
CREATE TABLE ACTIVEREPORTS ( REPORTID VARCHAR2(32) NOT NULL, LINE_NO NUMBER(5,0) NOT NULL, LINE VARCHAR2(2000) CONSTRAINT ACTIVEREPORTS_PK PRIMARY KEY (REPORTID, LINE_NO) USING INDEX )
Option Explicit '動作環境変数 dim oraconst dim database dim username dim password oraconst = "C:\Oracle\Ora92\oo4o\ORACONST.TXT" ' 設定しなければ %ORACLE_HOME% を探しに行きます database = "database" username = "username" password = "password" 'Globalオブジェクト dim wsh dim fso dim ado dim OraSession dim OraDatabase 'ADODB定数 const adBinary = 1 const adText = 2 const adUTF8 = "UTF-8" const adReadAll = -1 const adReadLine = -2 dim arg dim msg call init() for each arg in WScript.Arguments msg = msg & fso.GetFilename(arg) & vbCrLf call main(arg) next call fini() WScript.Echo msg & vbCrLf & "を ActiveReports へインポートしました" WScript.Quit sub init() set wsh = CreateObject("WScript.Shell") set fso = CreateObject("Scripting.FileSystemObject") if WScript.Arguments.Count = 0 then call err.Raise(vbObjectError + 1,, "*.rpx(ActiveReportsレポート定義ファイル) をドロップして下さい") end if for each arg in WScript.Arguments if StrComp("rpx", fso.GetExtensionName(arg), vbTextCompare) <> 0 then call err.Raise(vbObjectError + 2,, fso.GetFilename(arg) & " は *.rpx(ActiveReportsレポート定義ファイル) ではありません") end if next 'ORACONST.TXT定義展開 if len(oraconst) = 0 then if StrComp("%ORACLE_HOME%", wsh.ExpandEnvironmentStrings("%ORACLE_HOME%"), vbTextCompare) = 0 then call err.Raise(vbObjectError + 3,, "環境変数 ORACLE_HOME を取得できません") end if oraconst = fso.BuildPath(wsh.ExpandEnvironmentStrings("%ORACLE_HOME%"), "oo4o\ORACONST.TXT") end if if fso.FileExists(oraconst) then ExecuteGlobal Replace(fso.OpenTextFile(oraconst).ReadAll, "Global ","") else call err.Raise(vbObjectError + 4,, oraconst & " ファイルが見つかりません") end if '入力ファイル設定 Set ado = CreateObject("ADODB.Stream") ado.Type = adText ado.Charset = adUTF8 'ORACLE接続 Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase(database, username & "/" & password, ORADB_DEFAULT) OraDatabase.Parameters.Add "REPORTID", 0, ORAPARM_INPUT OraDatabase.Parameters.Add "LINE_NO" , 0, ORAPARM_INPUT OraDatabase.Parameters.Add "LINE" , 0, ORAPARM_INPUT end sub sub main(filename) dim reportid dim line_no dim line reportid = ucase(fso.GetFilename(filename)) line_no = 0 ado.Open ado.LoadFromFile filename OraSession.BeginTrans OraDatabase.Parameters("REPORTID").AutoBindEnable OraDatabase.Parameters("LINE_NO").AutoBindDisable OraDatabase.Parameters("LINE").AutoBindDisable OraDatabase.Parameters("REPORTID").Value = reportid OraDatabase.ExecuteSQL "DELETE FROM ActiveReports WHERE REPORTID = :REPORTID" OraDatabase.Parameters("REPORTID").AutoBindEnable OraDatabase.Parameters("LINE_NO").AutoBindEnable OraDatabase.Parameters("LINE").AutoBindEnable do while not ado.EOS line_no = line_no + 1 line = ado.ReadText(adReadLine) OraDatabase.Parameters("REPORTID").Value = reportid OraDatabase.Parameters("LINE_NO").Value = line_no OraDatabase.Parameters("LINE").Value = line OraDatabase.ExecuteSQL "INSERT INTO ActiveReports VALUES (:REPORTID, :LINE_NO, :LINE)" loop OraSession.CommitTrans ado.Close end sub sub fini() set wsh = Nothing set fso = Nothing set ado = Nothing set OraDatabase = Nothing set OraSession = Nothing end sub