InstallShield使用——几个技术问题介绍
1 几个技术问题介绍
1.1 数据库设置
在安装程序中设置数据库,有两种方法:一种采用命令行附加数据库文件,一种是通过SQL Script脚本创建数据库,对于编写SQL Script过于复杂,或创建数据库时间过长时建议采用第一种方法。
1.1.1 命令行附加数据库
1. 将数据库文件(a_data.mdf和a_log.ldf)插入Support Files中;
2. 定义变量:
STRING psvSQLsvr, psvSQLusr, psvSQLpwd;
BOOL bvWindowsLogin;
3. 定义CreateDataBase函数:
prototype CreateDataBase(STRING,STRING,STRING);
4. 编写CreateDataBase函数:
function CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd)
STRING szWaitTxt,szdatabase,path,path3;
begin
path=TARGETDIR^"Data""a_data.MDF";
path3=TARGETDIR^"Data""a_log.LDF";
szWaitTxt=" 正在创建数据库....";
SdShowMsg (szWaitTxt, TRUE);
Delay(3);
CopyFile(SUPPORTDIR^"a_data.MDF",path);
CopyFile(SUPPORTDIR^"a_log.LDF",path3);
szdatabase = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q ""exec sp_attach_db N'a' , N'"+path+"',N'"+path3+"'""";
if (LaunchAppAndWait("osql.exe", szdatabase,WAIT)<0) then;
MessageBox ("数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000."n如仍无法解决,请联系系统供应商!",SEVERE);
SdShowMsg (szWaitTxt, FALSE);
return -1;
endif;
end;
5. 获取数据库的登录信息,如果没有创建数据库的脚本,安装程序不会弹出SQL登录验证界面,需要编写代码:
Prototype number SQLLogin(); //定义登录函数
function SQLLogin ()
number nResult, nSize;
STRING sMessage, sTemp;
begin
Dlg_Sql:
SQLRTInitialize2 ();
nResult = SQLServerSelectLogin(psvSQLsvr, psvSQLusr, psvSQLpwd, bvWindowsLogin );
if (nResult = BACK) return BACK;
nSize=MAX_PATH;
MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS", sTemp, nSize );
if(sTemp!="0") then
nSize = _MAX_PATH;
MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS_ERROR", sMessage, nSize );
if( nSize = 0 ) then
sMessage = SdLoadString( IDS_IFX_SQL_ERROR_LOGIN_FAILED );
endif;
MessageBox( sMessage, MB_OK );
goto Dlg_Sql;
endif;
return 0;
end;
6.