您的位置:首页 > 数据库 > Oracle

installshield 如何实现Oracle数据库脚本的执行功能

2012-08-22 16:05 363 查看
功能点介绍:

用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 方法完成后,接下来要做的就是在需要导入脚本的地方调用它了。哦了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: