我作的这个产品现马上就要发布了,但还有一个问题我还没完全解决,详细说明如下:用户买了我的产品后,第一步是安装SQL Server数据库(这个倒没什么问题);
然后安装我的软件(此处耍判断是否已安装SQL Server,否则判断是否启动了服务),数据库文也放在我的软件件包里,安装完成后,运行我的程序,这个时间我要将数据库附加到SQL Server(附加时具体如何操作),然后连接到我的数据库;完事。求救:如何成功附加数据库(中间可能会有一些细节吧,那两句命令我是知道,但有时不能成功附加,也不知道什么原因),希望能来点优质的代码,谢谢!
万分感谢!

解决方案 »

  1.   

    判断SQL服务是否打开很简单,其实最好的办法是要求用户输入SQL用户名和密码,然后用这个密码连接LocalHost,如果连接成功,就开始附加,否则弹出提示。
    附加过程也是一样的,首先文件的路径要正确,因为附加数据库是要求绝对路径的。
    保证SQL里没有这个数据库名称。
      

  2.   

    你还不如在SQL中弄一个作业,安装完成后,把你的数据库恢复过来.
      

  3.   

    在SQL SERVER 企业管理器中用附加命令吧,又快又方便
      

  4.   

    附加数据库:resourcestring
      s1='Provider=SQLOLEDB.1;Integrated Security=SSPI;';
      s2='Initial Catalog=master;Data Source=127.0.0.1;';
    begin
      form1.ADOConnection1.Close;
      form1.ADOConnection1.ConnectionString:=s1+s2;
      form1.ADOConnection1.Open;
      try
        with adoquery1 do
          begin
            close;
            sql.Clear;
            sql.Add(' exec sp_attach_db ''hgdata'','''+getcurrentdir()+'\hg.mdf'','''+getcurrentdir()+'\hglog.ldf'' ');
            execsql;
          end;
        messagebox(form1.Handle,pchar('挂接数据库成功!'),'提示',mb_ok or mb_iconinformation);
      except
        application.Terminate;
      end;
    end;//有时不能附成功,可能是由于数据库中已存在了一同名的数据库,
      

  5.   

    以下是installshield7.0安装过程中附加数据库的代码:
    function OnFirstUIAfter()
        STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
        NUMBER bOpt1, bOpt2,nDefOption; 
        string svSQLsvr,svSQLusr,svSQLpwd,szCmdLine,szWaitTxt;//quote SQL Database parameter
    begin
        ///////////////////////////* quote the SQL Dababase *//////////////////////
        /*Create SQL Database*/    
       SdShowDlgEdit3 ( "请填写数据库信息" , "请填写数据库信息", "数据库服务器名", "用户名" , "密码" ,svSQLsvr , svSQLusr  , svSQLpwd  );  
    szWaitTxt=" 正在创建所需数据库....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(3); 
    szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q \"exec sp_attach_db N'Xoffice' , N'"+TARGETDIR ^"data\\MP_Data.MDF', N'"+TARGETDIR ^"data\\MP_Log.LDF'\"";
    if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000.\n如仍无法解决,请联系系统供应商!",SEVERE);
    endif;
    SdShowMsg (szWaitTxt, FALSE);   
    //-------------------------------------
        /*Test SQL Database*/
    szWaitTxt=" 正在生成数据库服务器作业....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(3); 
    szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q \"use MP_Test; exec T_createjob\"";
    if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("生成数据库服务器作业失败!您可以在 sql查询分析器中执行 \n use Mp_Test; exec T_createjob \n完成!",SEVERE);
    endif;   
    SdShowMsg (szWaitTxt, FALSE);