自动创建数据库结构(sql2000+D6)

转载 2006年05月27日 16:14:00
自动创建数据库结构(sql2000+D6)
作者:niker_2001  来源于:delphibbs.com  发布时间:2005-12-16 12:48:00
unit create_db_unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB,inifiles, ExtCtrls, Buttons,
  BusinessSkinForm;

type
  Tcreate_db_f = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    ADOConnection: TADOConnection;
    Label2: TLabel;
    Label3: TLabel;
    Bevel1: TBevel;
    Button2: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    bsBusinessSkinForm1: TbsBusinessSkinForm;
    procedure Button1Click(Sender: TObject);
    function CheckDataBaseExists(dn:string):boolean;
    procedure Button2Click(Sender: TObject);
    procedure CheckInput;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  create_db_f: Tcreate_db_f;

implementation

uses logo_unit;

{$R *.dfm}

const
  connectstr1 = 'Provider=SQLOLEDB.1;Password=%s;Persist Security Info=False;User ID=%s;Initial Catalog=%s;Data Source=%s;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=RD-SW;Use Encryption for Data=False;';
  connectstr2 = ' Tag with column collation when possible=False';
  dbname='CREATE DATABASE [%s]  ON (NAME = N'+''''+'%s'+'''';
  dbpath=', FILENAME = N'+''''+'%s'+'''';
  logname=', SIZE = 46, FILEGROWTH =1) LOG ON (NAME = N'+''''+'%s'+'''';
  logpath=',FILENAME = N'+''''+'%s'+''''+', SIZE = 34, FILEGROWTH = 1)';

{******************************************************************************
完整检查
*****************************************************************************}
procedure Tcreate_db_f.CheckInput;
begin
  if (edit1.Text='') or (edit2.Text='') or (edit3.Text='') then
  begin
    showmessage('套帐名称,数据路径,日志路径 都要输入完整');
    abort;
  end;
end;


{**************************************************************************
  连接数据且查看数据库是否存在
***************************************************************************}
function Tcreate_db_f.CheckDataBaseExists(dn:string):boolean;
var
  supername,password,datasource:string;
  Myinifile:Tinifile;
  qt:Tadoquery;
  procedure connect_database(pwd,supername,ds:string);
  begin
    with adoconnection do begin
      if connected then close;
      connectionstring := format(connectstr1, [pwd, supername, 'master', ds]);
      connectionstring := connectionstring + connectstr2;
      open;
    end;
  end;
begin
  MyIniFile := TIniFile.Create(extractfilepath(application.ExeName)+'connection.ini');
  with MyIniFile do begin
    try
      supername := Readstring('connection', 'supername', 'sa');
      password := readstring('connection', 'password', '');
      datasource := readstring('connection', 'source', '');
    finally
      free;
    end;
  end;
  connect_database(password,supername,datasource);
  qt:=Tadoquery.Create(self);
  qt.Connection:=adoconnection;
  qt.SQL.add('Select name From sysdatabases where name='+''''+dn+'''');
  qt.Open;
  result:=qt.RecordCount>0;
end;

procedure Tcreate_db_f.Button1Click(Sender: TObject);
var
  qt:Tadoquery;
  op:TOpenDialog;
  dbstring,createstr:string;
begin
  CheckInput;
  if CheckDataBaseExists('super'+edit1.Text) then begin
        showmessage('套帐名称已经存在!请取另一个名称。');
        exit;
  end
  else begin
  createstr:='super_'+edit1.text;
  dbstring:=format(dbname,[createstr,createstr+'Data']);
  dbstring:=dbstring+format(dbpath,[edit2.text]);
  dbstring:=dbstring+format(logname,['super_'+edit1.text]);
  dbstring:=dbstring+format(logpath,[edit3.text]);
//  showmessage(dbstring);
  qt:=Tadoquery.Create(self);
  qt.Connection:=adoconnection;
  op:=TOpenDialog.Create(self);
//  showmessage(extractfilepath(application.ExeName)+'db.txt');
  try
    qt.SQL.Add(dbstring);
//    showmessage(qt.SQL.Strings[0]);
    try
      qt.ExecSQL;//创建数据库,
      qt.SQL.Clear;
      if fileexists(extractfilepath(application.ExeName)+'db.txt') then
            qt.SQL.LoadFromFile(extractfilepath(application.ExeName)+'db.txt')
      else if op.Execute then begin
            qt.SQL.LoadFromFile(op.FileName);
      end else exit;
//      showmessage(qt.SQL.Strings[0]);
      qt.SQL.Strings[0]:='use '+createstr;
//      qt.SQL.SaveToFile('c:/test.txt');
      qt.ExecSQL;//db.txt保存的是数据库创建的脚本
      showmessage('套帐创建成功!');
//      LOGO.GETDATABASE;
      CLOSE;
    except
       on e:Exception do showmessage(e.Message);
    end;
  finally
    qt.Free;
    op.Free;
  end;
  end;
end;

procedure Tcreate_db_f.Button2Click(Sender: TObject);
begin
  close;
end;

procedure Tcreate_db_f.SpeedButton1Click(Sender: TObject);
var
  op:Tsavedialog;
begin
  op:=Tsavedialog.Create(self);
  try
    op.DefaultExt:='.MDF';
    OP.Filter:='数据文件|*.MDF';
    op.FileName:='super_data'+edit1.Text;
  //  op.Options:=op.Options+[ofPathMustExist];
    if op.Execute then edit2.Text:=op.FileName;
  finally
    op.Free;
  end;
end;

procedure Tcreate_db_f.SpeedButton2Click(Sender: TObject);
var
  op:Topendialog;
begin
  op:=Topendialog.Create(self);
  try
    op.DefaultExt:='.LDF';
    OP.Filter:='日志文件|*.LDF';
    op.FileName:='super_log'+edit1.Text;
    if op.Execute then edit3.Text:=op.FileName;
  finally
    op.Free;
  end;
end;

end.
//sql生存的脚本除去所有的go语句,初始化的数据加在其后,存成一个.txt文件,如果直接使用生成的.sql将会出现语法错误.

相关文章推荐

通用自定义查询 (D6/SQL2000)

  • 2006年01月13日 09:51
  • 23KB
  • 下载

SQL2000自动备份数据库并发送邮件报告数据库自动备份情况

最近在一个做企业的一个内部系统,数据库采用的是SQL2000,为了保证数据的安全性,需要每天下班之后做数据备份,并且通过邮件的方式通知管理员备份情况。备份数据库很简单,用SQL代理建立一个作业,每天定...

SQL2000查询指定表的表结构、字段、主键、字段描述

以前写的查询工具只应用于2005和2008版本;但是一般的虚拟主机只支持Sql2000估计是为了统一用户的版本或者sql200很经典啊 ,简单实用,没那么多花哨的功能 ,呵呵,本人也很喜欢老系统。老软...

MS SQL2000 数据库置疑解决方法

数据库被置疑后的解决方法(一) A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager  里面建立。 B.停掉数据库服...

sql2000海量数据库的查询优化及分页算法

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [db...

怎么在SQL2000里面添加从别的地方备份过来的数据啊,附加数据库的时候它提示不是正确的MDF文件

备份的文件,一定要使用还原的方式。 而在数据库上分离的数据文件和日志文件,才能使用附加的方式附加数据库。 所以按照您的说法,数据库是别的地方备份过来的,那么你只能通过还原的方式才可以。 在企业管理器打...
  • wzjemb
  • wzjemb
  • 2011年07月07日 19:47
  • 2138

access 转成sql2000数据库方法

1,打开”控制面板“下”管理工具“中的”数据库源“; 2,按”添加“添加一个新的数据源,在选择栏里选”Driver do microsoft Access (*.mdb)”,完成后将出现一个框, 在”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动创建数据库结构(sql2000+D6)
举报原因:
原因补充:

(最多只允许输入30个字)