如题!如果有详细解释和代码可以还加分。

解决方案 »

  1.   

    unit BackUp_Form;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TFlatGaugeUnit, StdCtrls, TFlatEditUnit, ExtCtrls,FileCtrl;type
      TBackup_F = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        ZT_FE: TFlatEdit;
        JD_FG: TFlatGauge;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Backup_F: TBackup_F;implementation{$R *.dfm}Uses
      ExtIniFiles,StrUtils;function GetFileNum(dir:string):integer;
    var
      sr:Tsearchrec;
    begin
      result:=0;
      if findfirst(dir,faanyfile,sr)=0 then
        repeat
          if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
            result:=result+1;
        until findnext(sr)<>0;
    end;
    //***********************************************************************************
    procedure Wait(second:Longint);
    var
      FirstTickCount:longint;
    begin
      FirstTickCount:=GetTickCount;
      repeat
        Application.ProcessMessages;
      until ((GetTickCount-FirstTickCount) >=second);
    end;
    //***********************************************************************************
    procedure TBackup_F.Timer1Timer(Sender: TObject);
    var
      myini:TExtIniFile;
      cz,num:integer;
      spath,dpath,name,RQ:string;
      sr:Tsearchrec;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
    begin
      Timer1.Enabled:=false;
      myini:=TExtIniFile.Create(ExtractFilePath(Application.ExeName)+'set.ini');
      cz:=myini.ReadInteger('bakup','CZ',0);
      if cz=0 then
        begin
          spath:=ExtractFilePath(Application.ExeName)+'Data';
          dpath:=myini.ReadString('bakup','BakPath','');
          dpath:=dpath+'\'+AnsiReplaceStr(DateTimeToStr(now),':','');
          ForceDirectories(dpath);
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在备份数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库备份成功';
          MessageBox(handle,'恭喜你:数据库备份成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end
        else begin
          RQ:=myini.ReadString('bakup','RQ','');
          spath:=myini.ReadString('bakupdian',RQ,'');
          spath:=spath+'\'+RQ;
          dpath:=ExtractFilePath(Application.ExeName);
          dpath:=dpath+'Data';
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在还原数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);  
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库还原成功';
          MessageBox(handle,'恭喜你:数据库还原成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end;
      StartupInfo.cb:=sizeof(StartupInfo);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      CreateProcess(pchar(ExtractFilePath(Application.ExeName)+'TSGL.exe'),nil,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
      close;
    end;end.
      

  2.   

    我的意思是说我的程序发布时做成SETUP文件,安装完毕后,自动将数据库也安装到SQL SERVER上,不需要手工添加。其中最好有检测系统是否安装SQL SERVER的提示。我在线等待,答案通过,马上揭帖。
      

  3.   

    上述代码稍加修改就可以了,以还原方式导入SQL SERVER数据就是一个最简单的方法。
    至于检测系统是否安装SQL SERVER,做一界面提示输入用户名、密码、服务器名等信息,然后连接一下不就可以了吗
      

  4.   

    这个你要研究install shield的script了
    实现是可以的
    看看install shield的帮助吧
      

  5.   

    谢谢各位,我是用setup factory做安装的。脚本如何写呢?我现在急用。有代码的欢迎贴上,马上给分。
      

  6.   

    install shield可以做到,不过我不知道该怎么做。
      

  7.   

    自己用代码可以实现:(大概如下)
    指定数据文件的位置;
    用打包工具将数据文件拷贝到目标位置;
    再写代码将数据文件附加到SQL SERVER中(用sp_attach_db存储过程可以实现);
    当然前提是目标机器的SQL SERVER服务是开启的.
      

  8.   

    这个实际就是一个数据导入先判断是否安装了SQL,然后创建数据库,把你的数据备份做做还原(导入):转贴(还原)实例:
     begin
                pgbar.Max:=100;
                pgbar.Min:=0;
                pgbar.Step:=20;
                try
                    ADOCommand1.CommandText:='use master ';
                    pgbar.StepIt;
                     pgbar.StepIt;
                    adocommand1.Execute ;
                    adocommand1.CommandText:='RESTORE database docmanage FROM DISK = ''c:\back.bak''  with replace ';
                    pgbar.StepIt;                pgbar.StepIt;
                    pgbar.StepIt;
                    adocommand1.Execute ;
                     try
                         aDOConnection1.Connected:=true;
                     except
                        ShowMessage('无法连接指定的数据库!');
                        application.Terminate;
                     end;
                    form1.Hide;
                      if messagedlg('c:\back.bak已成功还原到数据库docmanage!继续?',mtwarning,[mbok],0)=mrok then
                         begin
                           form2.close
                      end;
                except
                   on exception do
                       if ADOConnection1.InTransaction then
                          ADOConnection1.RollbackTrans;
                end;
    end;
    end;
      

  9.   

    你可以写一些SQL语句来回复数据库,然后在程序汇总调用就行了另外sql server提供了一组ActiveX对象,好像是DMO吧,也可以使用它们完成