📄 createdb.pas
字号:
unit createdb;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,StdCtrls,Calendar, Grids, Spin, Buttons,FileCtrl,
Gauges, Db, DBTables, ComCtrls, ADODB,registry,Barthread;
const
PDOMS_SQL70_CREATETB = 'CSI_XWFD.sql';
PDOMS_SQL70_CREATEDB = 'CSI_XWFD.sql';
type
TMainForm = class(TForm)
WizardNotebook: TNotebook;
GroupBox1: TGroupBox;
rbCdb: TRadioButton;
rbCtb: TRadioButton;
rbBoth: TRadioButton;
rbSkip: TRadioButton;
Label11: TLabel;
GroupBox4: TGroupBox;
Label8: TLabel;
Label15: TLabel;
SpeedButton2: TSpeedButton;
Label17: TLabel;
Label18: TLabel;
dbSize: TSpinEdit;
elocation: TEdit;
dbName: TEdit;
dbType: TComboBox;
cbTc: TCheckBox;
Label20: TLabel;
Animate1: TAnimate;
ADO: TADOConnection;
Memo1: TMemo;
Panel1: TPanel;
Image1: TImage;
Label3: TLabel;
Label5: TLabel;
Panel2: TPanel;
Label7: TLabel;
Label14: TLabel;
Label16: TLabel;
Panel3: TPanel;
Label12: TLabel;
spLog: TSpinEdit;
Label1: TLabel;
ProgressBar1: TProgressBar;
Panel4: TPanel;
btnNext: TButton;
btnFinish: TButton;
Back: TButton;
Bevel1: TBevel;
Image2: TImage;
Image4: TImage;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure eLocationExit(Sender: TObject);
procedure cbTcClick(Sender: TObject);
procedure dbTypeExit(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnFinishClick(Sender: TObject);
procedure BackClick(Sender: TObject);
private
{ Private declarations }
function ExecuteCreate:Boolean;
function WinExecAndWait32(FileName:String; Visibility : integer):integer;
function CreateTable:boolean;
function CreateDB:boolean;
function GetCompname:string;
function GetdeviceNum:String;
procedure SetdeviceNum(sNum:String);
procedure sysDelay(aMs: Longint);
procedure StartThread;
procedure StopThread;
procedure ExecThread(str:string);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
bDB,bTable,bBoth,bSkip,bTC:Boolean;
sDbname,sDbType,sLoginid,sPassword,sLocation:string;
nSize:integer;
DBThread:TBarThread;
implementation
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject);
var
Reg: TRegistry;
str:string;
begin
WizardNotebook.ActivePage:='STEP1';
dbtype.itemIndex:=0;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SOFTWARE\MicroSoft\MSSQLServer\Setup', True) then begin
str:=Reg.ReadString('SQLDataRoot');
if str<>'' then begin
elocation.Text:=str+'\data';
end;
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
var dir:string;
begin
if SelectDirectory(dir, [sdAllowCreate, sdPrompt, sdPerformCreate], 0) then begin
if not DirectoryExists(dir) then begin
MessageDlg('不能建立目录!', mtError, [mbCancel], 0);
Exit;
end;
eLocation.Text:=dir;
end;
end;
procedure TMainForm.eLocationExit(Sender: TObject);
begin
try
if not DirectoryExists(eLocation.text) then
if not ForceDirectories(eLocation.text) then begin
MessageDlg('不能建立目录 !',mtwarning,[mbCancel],0);
eLocation.SetFocus;
Exit;
end;
except
MessageDlg('不能建立目录 !',mtwarning,[mbCancel],0);
eLocation.SetFocus;
Exit;
end;
end;
procedure TMainForm.cbTcClick(Sender: TObject);
begin
bTC := cbTc.Checked;
end;
procedure TMainForm.dbTypeExit(Sender: TObject);
begin
if dbtype.text='' then begin
dbtype.setfocus;
Exit;
end;
end;
function TMainform.CreateTable:boolean;
var Str:string;
r:integer;
begin
if (bDB) or (bBoth) then begin
Str:='"'+ExtractFilePath(Application.ExeName)+'ISQL.exe'+'"'+ ' -E -d '+dbName.Text
+' -i '+'"'+ExtractFilePath(Application.ExeName)+PDOMS_SQL70_CREATETB+'"'+' -l45';
end;
{if MessageDlg(' Are you sure you want to create table? ', mtInformation, [mbYes, mbNo], 0)=mrNo then begin
Result:=FALSE;
Exit;
end;
}
//startThread;
try
Animate1.FileName:=ExtractFilePath(Application.ExeName)+'filedisk.avi';
Animate1.Active:=true;
Animate1.Visible:=True;
except
end;
sysDelay(6000);
r:=WinExecAndWait32(PChar(str), SW_HIDE);//SW_SHOWDEFAULT);
if r<>0 then begin
Application.MessageBox('不能建立表.', PChar(str), mb_OK);
Result:=FALSE;
Exit;
end;
Result:=TRUE;
end;
//
function TMainform.CreateDB:boolean;
var
str,SQLstmt,SQLstmt1: String;
r:integer;
computername:string;
CommandType: TCommandType;
//ExecuteOptions: TExecuteOptions;
sDevNum:string;
begin
try
sDevNum:=GetDeviceNum;
SQLstmt := 'Use master '+#13+
'CREATE DATABASE '+dbName.text+ #13+
'ON '+#13+
'(NAME ='+ dbName.text+'_Data,'+#13+
'FILENAME= ' +''''+ elocation.text+'\'+dbName.text+'_Data.mdf'+''''+','+#13+
'SIZE = '+dbSize.Text+')'+#13+
'LOG ON '+#13+
'(NAME ='+ dbName.text+'_Log,'+#13+
'FILENAME= ' +''''+ elocation.text+'\'+dbName.text+'_log.ldf'+''''+','+#13+
'SIZE = '+spLog.Text+')'+#13+
' USE MASTER '+#13+
' IF NOT EXISTS (SELECT * FROM syslogins WHERE name = '+''''+'PDOMS_USER'+''''+') '+
' exec sp_addlogin '+ ''''+'PDOMS_USER'+''''+','+''''+'0x2131222B2B2D4E5F214444555C593B21'+''''+','+''''+dbName.text+''''+#13;
SQLstmt1:=' use '+dbName.Text+' '+#13+
' exec sp_adduser '+''''+'PDOMS_USER'+''''+','+''''+'PDOMS_USER'+''''+','+''''+'db_owner'+''''+#13;
{if MessageDlg(' Are you sure you want to create database? ', mtInformation, [mbYes, mbNo], 0)=mrNo then begin
Result:=FALSE;
SetdeviceNum(sDevNum);
//Database.Connected:=FALSE;
Exit;
end;}
try
//StartThread;
Animate1.FileName:=ExtractFilePath(Application.ExeName)+'filedisk.avi';
Animate1.Active:=true;
Animate1.Visible:=true;
except
end;
sysDelay(6000);
computername:=GetCompName;
Memo1.Clear;
Memo1.Lines.Add(SQLstmt);
Memo1.Lines.SaveToFile(eLocation.text+'\Create70.sql');
Str:='"'+ExtractFilePath(Application.ExeName)+'ISQL.exe'+'"'+ ' -E -d master'
+' -i '+'"'+eLocation.text+'\Create70.sql'+'"'+' -l45';
r:=WinExecAndWait32(PChar(str), SW_HIDE);
if r<>0 then begin
Application.MessageBox('不能建立数据库.', PChar(str), mb_OK);
SetdeviceNum(sDevNum);
DeleteFile(eLocation.text+'\Create70.sql');
Result:=FALSE;
Exit;
end;
DeleteFile(eLocation.text+'\Create70.sql');
{ADO.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source='+
computername;
ADO.Connected:=TRUE;
ADO.Execute(SQLstmt,commandtype,ExecuteOptions);}
//
sysDelay(6000);
//
Memo1.Clear;
Memo1.Lines.Add(SQLstmt1);
Memo1.Lines.SaveToFile(eLocation.text+'\Create70.sql');
Str:='"'+ExtractFilePath(Application.ExeName)+'ISQL.exe'+'"'+ ' -E -d master'
+' -i '+'"'+eLocation.text+'\Create70.sql'+'"'+' -l45';
r:=WinExecAndWait32(PChar(str), SW_HIDE);
if r<>0 then begin
Application.MessageBox('不能建立数据库用户.', PChar(str), mb_OK);
SetdeviceNum(sDevNum);
DeleteFile(eLocation.text+'\Create70.sql');
Result:=FALSE;
Exit;
end;
DeleteFile(eLocation.text+'\Create70.sql');
except
//stmtParams.Free;
ADO.Connected:=FALSE;
Result:=FALSE;
Exit;
end;
Result:=TRUE;
end;
function TMainform.ExecuteCreate:Boolean;
begin
// Create DB
if (bDB) then begin
startThread;
if Not CreateDB then begin
MessageDlg('不能建立数据库. ', mtInformation, [mbCancel], 0);
Animate1.Active:=false;
WizardNoteBook.ActivePage:='Step2';
Stopthread;
Result:=FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -