自动创建数据库结构(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将会出现语法错误.

org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建

提供数据库的安装、卸载及初始化操作,提供如下接口:                                         操作接口名                      ...
  • j2eetop
  • j2eetop
  • 2015年06月09日 16:36
  • 306

建立数据库结构的两种方法

Q: 现在我的情况是: 已经安装了SQL SERVER,我自己做个安装程序(当然用DELPHI编写), 需要在SQL上建立一个名称为MyServer1的数据库,然后对该数据库使用已经有的三个 .SQL...
  • tao637
  • tao637
  • 2004年08月24日 10:43
  • 688

sql server 2005只备份数据库的结构

 sql server 2005只备份数据库的结构 1、打开sql
  • jackmacro
  • jackmacro
  • 2010年03月02日 15:29
  • 3531

progress的数据库结构及创建

progress的数据库结构及创建关键字: progress 4GL database 数据库在逻辑文件体系上,progress数据库有以下几种文件:.st文件  这是一个结构文件,由数据库创建者手动...
  • wwwabc0001
  • wwwabc0001
  • 2009年01月05日 14:43
  • 1803

sql server 查询数据库表结构

引用块内容 https://my.oschina.net/u/1032870/blog/840320 select b.[value] from sys.columns a left join s...
  • QiuNiao_TuDou
  • QiuNiao_TuDou
  • 2017年06月27日 11:46
  • 123

MYSQL 数据(表、库、结构)的命令行导出、导入

导出数据库: 语法:   Sql代码 mysqldump -u用户名 -p密码 数据库名 > 路径+导出的文件名.sql   mysqldump -u用户名 -p密码 数据库名 > 路径+...
  • liu_qiqi
  • liu_qiqi
  • 2013年10月08日 16:38
  • 1923

hibernate自动建表 属性填update 会报错

自动建表 属性填update 会报错的解决方法hibernate入门学习时,JUnit单元测试时,报错 显示以下错误: java.lang.ClassCastException: java....
  • sunnieZhu1995
  • sunnieZhu1995
  • 2017年02月14日 11:05
  • 536

比较数据库表结构之间的差异

 在工作中常常会遇到升级的事情,对于不同的用户,有时所使用的数据库的表结构也会有一些不同,时间长了,往往就需要一份各版本数据库表结构的差异报告了。当你需要一份这样的报告时,你会怎么做?一个个的比较每个...
  • henryzc
  • henryzc
  • 2006年06月23日 13:51
  • 1892

数据库数据结构优化

1、基本表扩展   数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面。为了优化数据库性能,需要对数据库中的表进行规范化。一般来说,逻辑数据库设计满足第三范式的表结构容易维护且基...
  • a236209186
  • a236209186
  • 2016年07月28日 10:37
  • 129

爬取百度贴吧数据

每次写的时候总是正则表达式出现问题,还需多多练习正则表达式的书写,需要耐心、细心 # coding: utf-8 # 引入请求包 import requests # 引入正则表达式包 impor...
  • sxc1414749109
  • sxc1414749109
  • 2018年01月10日 14:30
  • 80
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动创建数据库结构(sql2000+D6)
举报原因:
原因补充:

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