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 方法完成后,接下来要做的就是在需要导入脚本的地方调用它了。哦了。
用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 方法完成后,接下来要做的就是在需要导入脚本的地方调用它了。哦了。
相关文章推荐
- JS中如何实现sleep功能 js定时执行方法
- 使用ADF-BC 实现查询功能之三:如何在页面装载时自动执行查询?
- 如何实现关闭浏览器继续执行php脚本
- 假如我们需要每小时都去执行你写的脚本。在脚本中实现这样的功能,当时间是0点和12点时,需要将目录/d
- Linux关机时执行指定脚本功能实现
- 利用 Ant 的 SQL Task 来实现自己的 Java 执行 SQL 脚本文件的功能
- crontab中如何实现每隔多少天执行一次脚本
- crontab中如何实现每隔多少天执行一次脚本
- Linux学习-->如何通过Shell脚本实现发送邮件通知功能?
- Python实现脚本锁功能,同时只能执行一个脚本
- 【Linux学习笔记】Linux主机如何实现无需输入密码的远程登录或脚本远程执行
- Linux学习-->如何通过Shell脚本实现发送邮件通知功能?
- 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库.txt
- JQuery html API支持解析执行Javascript脚本功能实现-代码分析
- 如何在net中实现动态执行代码(js的eval)的功能?
- 通过linux的crontab实现定时执行shell脚本功能
- jenkins中如何实现执行脚本时的变量共享
- appium+python 多设备并行执行脚本如何实现?
- window下如何实现定时执行php脚本
- C# 实现类似SMSS的执行脚本的功能