您所在的位置: 程序员家园 -> 家园博客 ->
 
在哪里摔倒
就在哪里自己爬起来

用户登录

查  找

最新评论

最新留言

常用网站

网易邮箱 GMAIL  

百度搜索 MSDN

霏凡软件 BT精品

影视帝国 射 手 网

电驴下载 全 库 网

友情连接

茄菲的窝 冰冰博客

枫叶飘零 玫  瑰

ACEN 云 豹 子

统  计



Dict.CN 在线词典, 英语学习, 在线翻译
installshield 11.5生成MS SQL数据库真好用 
狼子 发表于 2006-9-18 14:22:00 阅读全文 | 回复(13) | 引用通告 | 编辑  installshield查看本站使用过本标签的日志查看本站使用过本标签的用户

PB的软件打安装包,最不好弄是注册表和数据库,以前一直用installshield 6.3,注册表和数据库要手动写script,很烦,经常出错,因为is不跟踪调用的外部程序,所以出错的时候没有容错处理,没有报错,客户生成数据库的时候不行,就是不行,不知道为什么不行

这个是installshield 6.3的时候生成数据库的方法

#i nclude "ifx.h"
//NNLL添加全局变量
BOOL bvType;  //记录安装类型,是否服务器
string szMyse,szMyna,szMypa;   //SQL的服务器名、用户名、登录密码
//NNLL添加完毕

在function OnFirstUIBefore()里,添加两个对方框,第一个是SelectType,用来给客户选择是不是安装服务器程序,如果是安装服务器程序,进入第二个对方框Dlg_SdShowDlgEdit3,在这里要求用户输入安装数据库的机器名、用户名和密码

//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;

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文件生成数据库

这个方法很麻烦,对不对?

哦,这个是2004-05-22写的,我用过两种方法生成数据库,一个是备份还原的方法,一个是用osql.exe执行sql文件的方法:http://www.tiantiansoft.com/bbs/dispbbs.asp?BoardID=3&&id=6263

现在用installshield11.5,生成数据库很方便,我学习的时候用的是这个:http://www.tiantiansoft.com/bbs/dispbbs.asp?boardID=149&ID=138676

上传了一份在论坛本地的,这里有is11.5的下载地址:http://www.tiantiansoft.com/bbs/dispbbs.asp?boardID=134&ID=138172

数据库的生成,三步:

1、写sql脚本,这个是肯定的啊,要写SQL脚本生成数据库的

2、设置进入Server Configuration->SQL Scripts,设置数据库连接和脚本信息

①右击SQL Scripts,New SQL Connection,添加数据库连接,如下图:

这里设置的Catalog Name、LoginID、password是默认的,在安装程序进行的时候,会生成这样的界面,用户可以自己修改:

这个界面相当于在installshield 6.3里的那个收集数据库信息的Dlg_SdShowDlgEdit3对话框,现在是由is自动生成的,由is自动生成的这个对话框的下一步,是用于检测数据库的连接状态的

②右击SQLConnection,Import script files,添加sql脚本,选择Text Replacement标签,在这里设置数据库的路径,如图:

这里的设置相当于在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

记录这个帖子:http://www.tiantiansoft.com/bbs/dispbbs.asp?boardid=3&id=74946

在这个帖子里,我学习的是is里的注册表函数,我现在忘了,我要重新学,is11.5和is6.3里,注册表现在我没有发现不同的地方,要动态生成注册表,要用函数

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-21 15:23:00 个人主页 | 引用 | 返回 | 删除 | 回复

请问有用11.5 照你这样做,可以把数据库名,用户名,没有吗写到WEB.CONFIG里面吗

如果方便加我QQ154400692 或MSN :satellite__work@hotmail.com 可以吗?

谢谢了

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-21 15:42:00 个人主页 | 引用 | 返回 | 删除 | 回复
用osql.exe执行sql文件的方法时,SQL脚本放在什么地方?
Re:installshield 11.5生成MS SQL数据库真好用
mountain315发表评论于2006-9-22 13:06:00 个人主页 | 引用 | 返回 | 删除 | 回复
以下引用东域流星在2006-9-21 15:23:00发表的评论:

请问有用11.5 照你这样做,可以把数据库名,用户名,没有吗写到WEB.CONFIG里面吗

如果方便加我QQ154400692 或MSN :satellite__work@hotmail.com 可以吗?

谢谢了


web.config文件不是sql文件,是一个xml文件,我没有试过,我想可以当文本文件写的。我上面有修改ini文件的代码,一样啊:

我上面有声明“string szMyse,szMyna,szMypa;   //SQL的服务器名、用户名、登录密码”

如果要修改的那一行是第12行,这样子改:

szFileNa = TARGETDIR + "\\web.config";
sztemp = "<add name='dbConnectionString' connectionString='Data Source=" + szMyse + ";Initial Catalog=数据库名;User ID=" + szMyna + ";Password=" + szMypa + "'";
FileInsertLine (szFileNa, sztemp, 12, REPLACE);

这样就可以把第12行替换了

Re:installshield 11.5生成MS SQL数据库真好用
mountain315发表评论于2006-9-22 13:08:00 个人主页 | 引用 | 返回 | 删除 | 回复
以下引用东域流星在2006-9-21 15:42:00发表的评论:

用osql.exe执行sql文件的方法时,SQL脚本放在什么地方?

用osql.exe执行sql文件的方法时,SQL脚本要安装到客户端,所以安装数据库的这段代码要写在OnEnd函数里,还要判断是“!MAINTENANCE”的时候执行,就是要等安装程序要结束了,要copy到客户端的所有文件都copy完的时候再执行osql.exe,调用sql文件
Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-25 13:46:00 个人主页 | 引用 | 返回 | 删除 | 回复

想问一下,如果让installshield 11.5

自动生成数据库,那么在卸载时怎么样才可以删除数据库呢?

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-26 11:44:00 个人主页 | 引用 | 返回 | 删除 | 回复

 卸载时删除数据库

在本地机上已经解决,如果我们是局域网,数据库安装在另一台机子上时,怎么删除不了数据库呢?

Re:installshield 11.5生成MS SQL数据库真好用
mountain315发表评论于2006-9-26 20:00:00 个人主页 | 引用 | 返回 | 删除 | 回复

因为我的东西是想保留数据库不删除的,所以我没有试过删除,我卸载的时候,数据库是不删除的

你是怎么实现卸载的时候删除本机的数据库的呢?

我觉得,数据库安装在另一个机器上的时候,为什么要给权限删除数据库呢?软件分服务器端和客户端,数据库是在服务器端的,如果卸载一个客户端的时候也可以卸载服务器端的数据库,那这个软件有大问题了,对不对?

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-27 14:26:00 个人主页 | 引用 | 返回 | 删除 | 回复

function DelDataBase(server,user,pass)
  STRING szWaitTxt,szdatabase1,szdatabase2,szdatabase3,path1;
begin

   
szWaitTxt="正在删除数据库....";
 
szdatabase2 ="/S "+server+" /U "+user+" /P "+pass+" /Q \" exec killspid N'数据库'";
LaunchAppAndWait("osql.exe", szdatabase2,WAIT);
//SdShowMsg(szdatabase2,WAIT);
//Delay(3);
szdatabase3 = "/S "+server+" /U "+user+" /P "+pass+" /Q \" exec sp_dbremove N'数据库'" ;
LaunchAppAndWait("osql.exe", szdatabase3,WAIT);
//SdShowMsg(szdatabase3,WAIT);
//Delay(3);
SdShowMsg (szWaitTxt, FALSE);
return 0;
end;

然后修改 OnSQLServerInitialize()脚本代码就可以了,只是我想两台机子都当服务器,所以程序安装在一台机子上,数据库安装在另一个机子上,我的不分客户端和服务器端的,我们是通过IE浏览器打开产品的。我只安装服务器端,所以我在卸载软件的时候想连同数据库一起删除的,所以请教一下你知道怎么删除吗?

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-28 15:46:00 个人主页 | 引用 | 返回 | 删除 | 回复

都弄明白了。就剩下怎么在XML里修改web.config了

 

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-29 17:35:00 个人主页 | 引用 | 返回 | 删除 | 回复

szFileNa = TARGETDIR + "\\web.config";
sztemp = "<add name='dbConnectionString' connectionString='Data Source=" + szMyse + ";Initial Catalog=数据库名;User ID=" + szMyna + ";Password=" + szMypa + "'";
FileInsertLine (szFileNa, sztemp, 12, REPLACE);

你的那个里面的'dbConnectionString' 是单引号括的,怎么样才可以换成双引号呢?Data Source=" + szMyse + ";Initial Catalog=数据库名;User ID=" + szMyna + ";Password=" + szMypa + "也是

急用!!谢谢

 

Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2006-9-30 10:02:00 个人主页 | 引用 | 返回 | 删除 | 回复

为什么用你这个方法就修改不了Web.config呢?

Re:installshield 11.5生成MS SQL数据库真好用
mountain315发表评论于2006-10-1 14:27:00 个人主页 | 引用 | 返回 | 删除 | 回复
把单引号换成双引号,不知道是不是用\",你试一下吧,你是写asp.net的吗?我也很喜欢asp.net
Re:installshield 11.5生成MS SQL数据库真好用
东域流星发表评论于2008-9-3 20:38:00 个人主页 | 引用 | 返回 | 删除 | 回复
您好! 我是东域流星的朋友,我现在用的他的号码,其他什么都配置好了,而且我什么也没有脚本也没写,现在开来要改XML只能写脚本了,我不太会脚本,您能给我指点指点吗,

发表评论:

    昵称:
    密码:
    主页:
    标题:
Powered by Oblog.