installshield 如何實現Oracle數據庫腳本的執行功能

功能點介紹:

用installshield打包一個應用,數據庫爲Oracle,要實現的功能是:用戶填寫數據庫配置信息後,點擊“下一步”自動執行腳本,導入數據信息。這是一個比較常見的功能。

具體做法:

Oracle的腳本常見的兩種:.sql 和 .dmp 格式的。

1 首先用installshield 將腳本文件導入:如圖

說一下:用紅色框圈着的導入方式,腳本文件是被打包在安裝包中的,也就是setup.exe文件中,用戶是看不到的。而Disk1的方式,腳本文件沒有被打包在安裝包中,而是在另一個文件夾中,用戶是可以看到的,至於用那種方式要看實際的情況,如果是給實施人員用,腳本可能是臨時換,就用disk1的方式,如果是最終的版本,直接給客戶,那一定就用第一種方式了。

2 導入腳本成功後,第二步,添加方法,代碼如下(爲了更直白的顯示導入.sql文件和導入.dmp文件的兩種方式,以下代碼模擬的場景是用戶在窗口中選擇要導入的是.sql文件或是.dmp文件,然後根據用戶選擇的執行相應的腳本文件。)

function Database_Installed()
string szTypeValue,szScriptPath,szCmdLine,szIp,szPort,szSerName,szUser,szSupportdir,szPwd,szWaitTxt,szUserName,szUserPwd,szTableSpace;//定義變量,不再贅述
number nSize, nResult;
begin
 szWaitTxt=" 正在執行數據庫腳本....";   
   nSize=MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE,"INITTYPE",szTypeValue,nSize);//獲取用戶所選擇的導入類型。

   //-----以下爲獲取用戶所填的數據庫配置信息
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "ORACLE_IP", szIp, nSize);
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "ORACLE_PORT", szPort, nSize);
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "ORACLE_ADMIN", szUser, nSize);
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "ORACLE_PWD", szPwd, nSize);
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "ORACLE_SERVERNAME", szSerName, nSize); 
   nSize = MAX_PATH;
   MsiGetProperty(ISMSI_HANDLE, "SUPPORTDIR", szSupportdir, nSize); //這個要特別注意,獲得文件相對的父路徑
 //----創建的新用戶的信息
 nSize=MAX_PATH;
    MsiGetProperty(ISMSI_HANDLE,"USERNAME",szUserName,nSize);   
    nSize=MAX_PATH;
    MsiGetProperty(ISMSI_HANDLE,"PASSWORD",szUserPwd,nSize);           
    nSize=MAX_PATH;
    MsiGetProperty(ISMSI_HANDLE,"TABLESPACE",szTableSpace,nSize);
 //---
 SdShowMsg (szWaitTxt, TRUE);
 //要根據用戶的選擇執行相應的腳本命令。
 switch(szTypeValue)
  case "1"://用戶選擇的是導入sql文件的。
    szScriptPath =szSupportdir+"\\數據.sql"; -------》注意這個路徑
    LongPathToQuote(szScriptPath, TRUE);


    szCmdLine = szUser + "/" + szPwd + "@//" + szIp + ":" + szPort + "/" + szSerName + " @" + szScriptPath;


    nResult=LaunchAppAndWait("sqlplus.exe", szCmdLine, LAAW_OPTION_WAIT );  //installshield 啓動sqlplus.exe,在sqlplus中執行 szCmdLine。
    if(nResult<0)then MessageBox("腳本執行失敗",WARNING); 
    endif;
  case "2"://用戶選擇的是導入dmp文件的。
    szScriptPath = szSupportdir+"\\表結構加數據.dmp";
    LongPathToQuote(szScriptPath, TRUE);


    szCmdLine = "imp "+ szUserName + "/"+szUserPwd+ "@" +szSerName+" file="+szScriptPath+" fromuser=idbase

    touser="+szUserName;   

                                                   
   nResult=LaunchAppAndWait("",szCmdLine,LAAW_OPTION_WAIT);//第一個參數爲“”,說明調用cmd.exe
   if(nResult<0)then MessageBox("腳本執行失敗",WARNING);
   //else MessageBox("腳本導入成功",WARNING);
   endif;   
 endswitch;                   
    SdShowMsg (szWaitTxt, FALSE);      
end;

需要注意的是:LaunchAppAndWait 方法相當於一個平臺,啓動了cmd.exe或者sqlplus.exe,但是具體命令是否能執行成功你需要先保證這些命令在sqlplus.exe或者cmd.exe中能執行成功。

3 方法完成後,接下來要做的就是在需要導入腳本的地方調用它了。哦了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章