這個是installshield 6.3的時候生成數據庫的方法
//NNLL添加全局變量
BOOL bvType; //記錄安裝類型,是否服務器
string szMyse,szMyna,szMypa; //SQL的服務器名、用戶名、登錄密碼
//NNLL添加完畢
在function OnFirstUIBefore()裏,添加兩個對方框,第一個是SelectType,用來給客戶選擇是不是安裝服務器程序,如果是安裝服務器程序,進入第二個對方框Dlg_SdShowDlgEdit3,在這裏要求用戶輸入安裝數據庫的機器名、用戶名和密碼
SelectType:
szMsg="請選擇安裝的計算機用於:" ;
bvCheck1 = TRUE;
bvCheck2 = FALSE;
bvType = TRUE;
nResult = AskOptions ( EXCLUSIVE , szMsg , "服務器" , bvCheck1 , "工作站" , bvCheck2 );
if (nResult = BACK) goto Dlg_SdLicense2;
if bvCheck2 = TRUE then
//工作站,註冊表項server=0
bvType = FALSE;
else
//服務器,註冊表項server=1
bvType = TRUE;
endif;
if bvType = TRUE then
Dlg_SdShowDlgEdit3:
szMsg = "請輸入服務器名或服務器的IP地址、登錄數據庫的用戶名和密碼";
szTitle = "請輸入服務器信息";
szField1 = "服務器名";
szField2 = "用戶名";
szField3 = "密碼";
nResult = SdShowDlgEdit3 (szTitle, szMsg, szField1, szField2, szField3, szMyse, szMyna, szMypa);
if (nResult = BACK) then
goto SelectType;
else
if (szMyse = "") then
MessageBox("請輸入服務器名或IP地址",INFORMATION);
goto Dlg_SdShowDlgEdit3;
elseif (szMyna = "") then
MessageBox("請輸入數據庫登錄用戶名",INFORMATION);
goto Dlg_SdShowDlgEdit3;
elseif (szMypa = "") then
MessageBox("請輸入數據庫登錄密碼",INFORMATION);
goto Dlg_SdShowDlgEdit3;
endif;
endif;
endif;
//NNLL修改完畢
添加OnEnd函數生成數據庫
//NNLL開始添加函數
function OnEnd()
string sztemp;
string szFileNa;
STRING szCmdLine,szWaitTxt;
begin
if !MAINTENANCE then //非維護性代碼,即只在安裝時執行
//修改ini文件
szFileNa = TARGETDIR + "//config.ini";
sztemp = "LogPass = " + szMypa;
FileInsertLine (szFileNa, sztemp, 3, REPLACE);
sztemp = "ServerName = " + szMyse;
FileInsertLine (szFileNa, sztemp, 4, REPLACE);
sztemp = "LogId = " + szMyna;
FileInsertLine (szFileNa, sztemp, 5, REPLACE);
//修改nnll.sql
szFileNa = TARGETDIR + "//mydata//nnll.sql";
sztemp = "CREATE DATABASE [WLpalestra] ON (NAME = N'homelandj_Data', FILENAME = N'" + TARGETDIR + "//mydata//homelandj.MDF' , SIZE = 5, FILEGROWTH = 10%) LOG ON (NAME = N'homelandj_Log', FILENAME = N'" + TARGETDIR + "//mydata//homelandj_log.LDF' , FILEGROWTH = 10%)";
FileInsertLine (szFileNa, sztemp, 1, REPLACE);
sztemp = "FROM DISK = '" + TARGETDIR + "//mydata//nnll.bak'";
FileInsertLine (szFileNa, sztemp, 44, REPLACE);
//處理數據庫
if bvType then
//MessageBox("服務器",INFORMATION);
szWaitTxt=" 正在創建"+@PRODUCT_NAME+"所需數據庫....";
SdShowMsg (szWaitTxt, TRUE);
Delay(2);
//szCmdLine = "-U "+szMyna+" -P "+szMypa+" -S "+szMyse+" -Q /"exec sp_attach_db N'GBWZ' , N'"+TARGETDIR ^"//wzgldata//GBWZ_Data.mdf'/"";
szCmdLine = "-U "+szMyna+" -P "+szMypa+" -S "+szMyse+" -E -i /"" + TARGETDIR + "//nnll.sql/"";
//MessageBox(szCmdLine,INFORMATION);
if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
MessageBox ("數據庫創建失敗!請確認您的系統中已安裝 Microsoft SQL Server 2000./n如仍無法解決,請聯繫系統供應商!",SEVERE);
endif;
endif;
endif;
end;
從紅色的“//修改nnll.sql”開始就是生成數據庫了,因爲要生成數據庫,所以要調用一個sql文件,這個sql文件我要copy到用戶的機器上,我要把sql文件裏面對應的生成數據庫兩個文件的路徑替換,調用osql.exe執行sql文件生成數據庫
數據庫的生成,三步:
1、寫sql腳本,這個是肯定的啊,要寫SQL腳本生成數據庫的
2、設置進入Server Configuration->SQL Scripts,設置數據庫連接和腳本信息
①右擊SQL Scripts,New SQL Connection,添加數據庫連接,如下圖:
500){this.resized=true;this.style.width=500;}">
這裏設置的Catalog Name、LoginID、password是默認的,在安裝程序進行的時候,會生成這樣的界面,用戶可以自己修改:
500){this.resized=true;this.style.width=500;}" resized="true">
這個界面相當於在installshield 6.3裏的那個收集數據庫信息的Dlg_SdShowDlgEdit3對話框,現在是由is自動生成的,由is自動生成的這個對話框的下一步,是用於檢測數據庫的連接狀態的
②右擊SQLConnection,Import script files,添加sql腳本,選擇Text Replacement標籤,在這裏設置數據庫的路徑,如圖:
500){this.resized=true;this.style.width=500;}">
這裏的設置相當於在installshield 6.3裏在OnEnd函數裏的手工替換,這裏我把“d:/”替換成“<TARGETDIR>/database/”,因爲在sql腳本里,我寫了把數據庫的兩個文件放在d:/,我現在想把數據庫生成在用戶安裝目錄下的database文件夾
3、修改腳本,添加安裝方式,如果用戶安裝服務器端程序,生成數據庫,如果用戶安裝的是客戶端程序,跳過數據庫的安裝
//NNLL加入判斷,安裝的是服務器還是工作站
SelectType:
szMsg="請選擇安裝的計算機用於:" ;
bvCheck1 = TRUE;
bvCheck2 = FALSE;
bvType = TRUE;
nResult = AskOptions ( EXCLUSIVE , szMsg , "服務器" , bvCheck1 , "工作站" , bvCheck2 );
if (nResult = BACK) goto Dlg_SdLicense2;
if bvCheck2 = TRUE then
//工作站,註冊表項server=0
bvType = FALSE;
else
//服務器,註冊表項server=1
bvType = TRUE;
endif;
//NNLL修改完畢
if bvType = TRUE then
Dlg_SQLServer: //數據庫連接
nResult = OnSQLServerInitialize( nResult );
if( nResult = BACK ) goto Dlg_SdFeatureTree;
Dlg_ObjDialogs: //測試數據庫連接
nResult = ShowObjWizardPages( nResult );
if (nResult = BACK) goto Dlg_SQLServer;
endif;
看,installshield11.5就這樣生成數據庫了,比6.3容易很多很多很多,對不對?好開心啊,用11.5