软件开发完成,做安装打包程序的时候,怎么在安装打包的时候创建数据库,也就是说怎么才能在软件里创建数据库(数据库里有部分初始括数据的!)弟兄们帮忙啊!!!

解决方案 »

  1.   

    1可以backup RESTORE;
    2拷贝mdb文件sp_attach_single_file_db
    3。create database...
      

  2.   

    在ADOQUERY的SQL中加入CREATE DATABASE bbb
    ON 
    ( NAME = bbb_dat,
       FILENAME = 'c:\temp\bbb.mdf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 )
    LOG ON
    ( NAME = 'bbb_log',
       FILENAME = 'c:\temp\bbblog.ldf',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB )再执行ADOQUERY.EXECSQL,就生成BBB数据库
      

  3.   

    这是我以前在delphi6+SQLServer7.0上做的,用TDatabase实现,
    对你可能有点用。
    unit InitDbDM;interfaceuses
      SysUtils, Classes, DB, DBTables, Registry, Windows, TlHelp32;type
      TInitDbDataMoudule = class(TDataModule)
        dbInitDb: TDatabase;
      private
        { Private declarations }
         function GetSQLServerPath:String;
      public
        { Public declarations }
        function IsSQLServerRunning:Boolean;
        procedure CreateDb(dbName : String;
                           dbSize : String);
      end;var
      InitDbDataMoudule: TInitDbDataMoudule;implementation
    {$R *.dfm}
      //**************************************************
      // 功能:取得SQLServer的安装路径
      //
      // 返回:SQLServer的安装路径
      //**************************************************
      function TInitDbDataMoudule.GetSQLServerPath:String;
      var
        reg : TRegistry;
        path : String;
      begin
        path := '';
        reg :=TRegistry.Create;
        reg.RootKey := HKEY_LOCAL_MACHINE;
        reg.OpenKey('Software\Microsoft\MSSQLServer\Setup', False);
        path := reg.ReadString('SqlPath');
        reg.CloseKey;
        reg.free;
        Result := path;
      end;  //**************************************************
      // 功能:检测SQLServer是否正在运行
      //
      // 返回:true    正在运行
      //       false   不在运行
      //**************************************************
      function TInitDbDataMoudule.IsSQLServerRunning: Boolean;
      var
        finded : bool;
        proListHandle : THandle;
        proStruct : TProcessentry32; //记录进程的数据结构;
      begin
        Result := False;
        proListHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        proStruct.dwSize := SizeOf(proStruct);
        finded := Process32First(proListHandle, proStruct);//发现第一个进程;
        while integer(finded) <> 0 do
        begin
          if Pos('SQLSERVR.EXE', Uppercase(proStruct.szExeFile)) <> 0 then
          begin
            Result:=True;
            Break;
          end;
          finded := Process32Next(proListHandle, proStruct);//发现下一个进程;
        end;
      end;  //**************************************************
      // 功能:创建SQLServer数据库
      //
      // 参数:dbName    数据库名
      //       dbSize    数据库大小
      //**************************************************
      procedure TInitDbDataMoudule.CreateDb(dbName : String;
                                            dbSize : String);
      var
        sqlPath : String;
        dataFile : String;
        logFile : String;
        createDbSql : String;
      begin
        sqlPath := GetSQLServerPath;    dataFile := sqlPath + '\data\' + dbName + '_data.mdf';
        logFile := sqlPath + '\data\' + dbName + '_log.ldf';    createDbSql := 'Create Database ' + dbName +
                       ' on primary(Name = ' + dbName + '_dat' +
                       ', FileName = "' + dataFile +
                       '" , Size = ' + dbSize +
                       ', FileGrowth = 1) ' +
                       'log on (Name = ' + dbName + '_log' +
                       ', FileName = "' + logFile +
                       '", Size = ' + dbSize +
                       ', FileGrowth = 1)';    if Not (FileExists(dataFile) or FileExists(logFile)) then
          dbInitDb.Execute(createDbSql);
      end;end.
      

  4.   

    如果你用installshield622打包,你可以将楼上的单独生成一个exe,
    然后在installshield中调用(LaunchApp)这个exe,你就不必修改你的程序了!
      

  5.   

    你可真够菜的,把创建中所需的表,视图,存储过程全部用sql,写好,单独做个执行程序,打包时放在第一步不就行了