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 方法完成后,接下来要做的就是在需要导入脚本的地方调用它了。哦了。

你可能感兴趣的:(installshield)