|
function InstallOracleComponent(szComponent) NUMBER nResult,nvFileHandle,nIndex,nvCount; STRING sMsg,szServer,szDB,szUser,szPassword,sCMD,sOPT,sInstance,sTmp,svLine; LIST listStatus;begin sMsg = '安裝'+szComponent+' ...'; SdShowMsg(sMsg, TRUE); // Fetch database connection information SQLRTGetConnectionInfo( 'oracle', szServer, szDB, szUser, szPassword ); nIndex = StrFind(szServer, ':'); nIndex = StrFindEx(szServer, '/', nIndex); StrSub(sInstance, szServer, nIndex+1, 100); sCMD = WINSYSDIR^'cmd.exe'; sOPT = ' /c '+'sqlplus.exe -L -S '+szUser+'/'+szPassword+'@'+sInstance; sOPT = sOPT+' @'+SRCDIR^szComponent+'.sql > '+SRCDIR^'dbstatus.txt 2>&1'; // Execute the script associated with the given component in database nResult=LaunchAppAndWait(sCMD, sOPT, WAIT|LAAW_OPTION_HIDDEN); if (nResult < 0) then MessageBox('Failed installing '+szComponent+' !', SEVERE); abort; endif; // 關閉安裝提示 SdShowMsg('', FALSE); // 在dbstatus.txt中查詢字串holytail,如果存在,說明指令碼已執行完 if (FileGrep(SRCDIR^'dbstatus.txt', 'holytail', svLine, nIndex, RESTART) = 0) then // 在dbstatus.txt中查詢字串ORA-,如果存在,說明指令碼執行出現錯誤 if (FileGrep(SRCDIR^'dbstatus.txt', 'ORA-', svLine, nIndex, RESTART) = 0) then sMsg = "更新資料庫出錯,點“是”開啟記錄檔並退出安裝,點“否”直接退出安裝。/n"; sMsg = sMsg+"若錯誤可忽略,可選擇資料庫類型“none”以跳過資料庫更新並直接更新程式,/n"; sMsg = sMsg+"然後在資料庫中手工執行SQL指令碼(安裝後儲存在script目錄下)"; nResult = AskYesNo(sMsg, YES); if (nResult = YES) then LaunchApp(WINSYSDIR^'notepad.exe', SRCDIR^'dbstatus.txt'); endif; abort; endif; else sMsg = "更新資料庫出錯,點“是”開啟記錄檔並退出安裝,點“否”直接退出安裝。/n"; sMsg = sMsg+"若錯誤可忽略,可選擇資料庫類型“none”以跳過資料庫更新並直接更新程式,/n"; sMsg = sMsg+"然後在資料庫中手工執行SQL指令碼(安裝後儲存在script目錄下)"; nResult = AskYesNo(sMsg, YES); if (nResult = YES) then LaunchApp(WINSYSDIR^'notepad.exe', SRCDIR^'dbstatus.txt'); endif; abort; endif;end; |