📄 main.pas
字号:
sDbName:=Trim(Self.ADS.FieldByName('名称').AsString);
IF sDbName='' THEN exit;
IF IsSysDB(sDbName) THEN exit;
IF Self.SaveDlg.Execute THEN
BEGIN
IF FileExists(Self.SaveDlg.FileName) THEN
BEGIN
ShowMessage('文件已存在!');
exit;
END;
BackUpSQLServerDbToFile(ADOConn, sDbName, Self.SaveDlg.FileName);
END;
END;
PROCEDURE TMainForm.pmiRestoreDBClick(Sender:TObject);
VAR sDbName:STRING;
BEGIN
IF NOT Self.ADS.Active THEN exit;
sDbName:=Trim(Self.ADS.FieldByName('名称').AsString);
IF sDbName='' THEN exit;
IF IsSysDB(sDbName) THEN exit;
IF Self.OpenDlg.Execute THEN
RestoreSQLServerDbFromFile(ADOConn, sDbName, Self.OpenDlg.FileName);
END;
PROCEDURE TMainForm.chkAutoStartClick(Sender:TObject);
BEGIN
MyVar.UserDB.AutoStart:=chkAutoStart.Checked
END;
PROCEDURE TMainForm.pmiBackupSetClick(Sender:TObject);
VAR i:Integer;
BEGIN
IF NOT Self.ADS.Active THEN exit;
FrmSetupTime:=TFrmSetupTime.Create(Application);
Self.ADS.First;
WHILE NOT Self.ADS.Eof DO
BEGIN
FrmSetupTime.ComboBox1.Items.Add(Self.ADS.FieldByName('名称').AsString);
Self.ADS.Next;
END;
FrmSetupTime.Label9.Caption:=MyVar.SysDB.savedb;
TRY
FrmSetupTime.showmodal;
MyVar.SysDB.savedb:=FrmSetupTime.ComboBox1.Text;
MyVar.SysDB.savepath:=FrmSetupTime.sSavePath;
FINALLY
FrmSetupTime.Free;
FrmSetupTime:=NIL;
END;
END;
PROCEDURE TMainForm.backupTimer(Sender:TObject);
VAR
Year, Month, Day, Hour, Min, Sec, MSec:Word;
backupname, name, mypath:STRING;
BEGIN
IF NOT ADS.Active THEN exit;
DecodeDate(Now, Year, Month, Day);
DecodeTime(Now, Hour, Min, Sec, MSec);
name:=MyVar.SysDB.savedb;
IF UpperCase(name)='MASTER' THEN exit;
backupname:=Trim(name)+FormatDateTime('yyyymmddhhmmss', Now);
mypath:=MyVar.SysDB.savepath;
IF mypath='' THEN
mypath:=sSQLRootPath+'DBackUp\';
IF RightStr(mypath, 1)<>'\' THEN
mypath:=mypath+'\';
CASE BackupType OF
0:
BEGIN //不备份
//
END;
1:
BEGIN //每小时
IF (Min=EveryTime)AND(Sec=0) THEN
BEGIN
BackUpSQLServerDbToFile(ADOConn, name, mypath+backupname);
END;
END;
2:
BEGIN //每天
IF (Hour=EveryDay)AND(Min=EveryTime)AND(Sec=0) THEN
BEGIN
BackUpSQLServerDbToFile(ADOConn, name, mypath+backupname);
END;
END;
3:
BEGIN //每周
IF ((DayOfWeek(Date)-1)=EveryWeek)AND(Hour=EveryDay)AND(Min=EveryTime)AND(Sec=0) THEN
BEGIN
BackUpSQLServerDbToFile(ADOConn, name, mypath+backupname);
END;
END;
4:
BEGIN //每月
IF (Day=EveryMonth)AND(Hour=EveryDay)AND(Min=EveryTime)AND(Sec=0) THEN
BEGIN
BackUpSQLServerDbToFile(ADOConn, name, mypath+backupname);
END;
END;
END; //case
END;
PROCEDURE TMainForm.StartTimer(Sender:TObject);
BEGIN
IF NOT bStart THEN
Self.btnStart.Click;
END;
PROCEDURE TMainForm.GridExit(Sender:TObject);
BEGIN
Grid.SaveGridLayoutIni(GridlayoutFile, 'grid', True);
END;
PROCEDURE TMainForm.GridEnter(Sender:TObject);
BEGIN
Grid.RestoreGridLayoutIni(GridlayoutFile, 'grid', [grpColIndexEh, grpColWidthsEh, grpSortMarkerEh,
grpColVisibleEh,
grpRowHeightEh, grpDropDownRowsEh, grpDropDownWidthEh]);
END;
PROCEDURE TMainForm.actStartExecute(Sender:TObject);
VAR sCmd:STRING;
sName, sPort:STRING;
BEGIN
IF bStart THEN exit;
Self.redtLog.Clear;
ShowInfo(statStat, -1, '正在为启动SQL Server 作准备...');
StartClickTime:=Now;
sPort:=MyVar.SysDB.port;
MyVar.SysDB.RealName:=edtSQLRealName.Text;
sName:=StrToStr('\', MyVar.SysDB.RealName, 0);
IF (sName<>Computername)AND(Pos('\', sName)<>0) THEN
BEGIN
MyWarning('SQL实例名错误......');
exit;
END;
IF NOT ckbService.Checked THEN
BEGIN
IF Self.chkAuthNT.Checked THEN
sCmd:=sSelfPath+'sqlservr.exe -c -d'
+sSQLRootPath+'data\master.mdf -l'
+sSQLRootPath+'data\mastlog.ldf -e'
+sSQLRootPath+'Log\log.txt '
ELSE
sCmd:=sSelfPath+'sqlservr.exe -d'
+sSQLRootPath+'data\master.mdf -l'
+sSQLRootPath+'data\mastlog.ldf -e'
+sSQLRootPath+'Log\log.txt ';
END
ELSE
BEGIN
IF Self.chkAuthNT.Checked THEN
sCmd:=sSelfPath+'sqlservr.exe -c -s'+sName+' -d'
+sSQLRootPath+'data\master.mdf -l'
+sSQLRootPath+'data\mastlog.ldf -p'+sPort+' -e'
+sSQLRootPath+'Log\log.txt '
ELSE
sCmd:=sSelfPath+'sqlservr.exe -s'+sName+' -d'
+sSQLRootPath+'data\master.mdf -l'
+sSQLRootPath+'data\mastlog.ldf -p'+sPort+' -e'
+sSQLRootPath+'Log\log.txt ';
END;
ShowInfo(statStat, -1, '正在启动SQL Server ...');
redtLog.Lines.Add('开始启动 SQL Server');
aRunDosThread:=TRunDosThread.Create(False, sCmd);
Sleep(3000);
CheckStat.Enabled:=True;
END;
PROCEDURE TMainForm.actStopExecute(Sender:TObject);
VAR i, max:Integer;
BEGIN
Self.redtLog.Clear;
Self.redtLog.Lines.Add('SQL Server 2000 服务已停止!');
ShowInfo(statStat, -1, 'SQL Server 被停止');
EndProcessSA;
bStart:=False;
Self.SetButtonStat;
END;
PROCEDURE TMainForm.actExitExecute(Sender:TObject);
BEGIN
Self.Close;
END;
PROCEDURE TMainForm.actShowExecute(Sender:TObject);
BEGIN
Self.Show;
Self.BringToFront;
END;
PROCEDURE TMainForm.RegisterNewName;
VAR
s:STRING;
myiipath:STRING;
f, m:textfile;
BEGIN
IF NOT IsNT THEN
WinExec(pchar('RegEdit /s '+sSelfPath+'myreg98.reg'), SW_HIDE)
ELSE
WinExec(pchar('RegEdit /s '+sSelfPath+'myregXp.reg'), SW_HIDE);
TRY
IF NOT IsNT THEN
AssignFile(f, pchar(sSelfPath+'myreg98.txt'))
ELSE
AssignFile(f, pchar(sSelfPath+'myregxp.txt'));
Reset(f);
AssignFile(m, pchar(sSelfPath+'myregm.reg'));
Rewrite(m);
WHILE NOT Eof(f) DO
BEGIN
Readln(f, s);
s:=StringReplace(s, '$name', MyVar.SysDB.RealName, [rfReplaceAll]);
s:=StringReplace(s, '$port', MyVar.SysDB.port, [rfReplaceAll]);
s:=StringReplace(s, '$path', sSelfPath+'.\..\', [rfReplaceAll]);
Writeln(m, s);
END;
CloseFile(f);
CloseFile(m);
Reg.CloseKey;
WinExec(pchar('RegEdit /s '+sSelfPath+'myregm.reg'), SW_HIDE);
EXCEPT
END;
END;
PROCEDURE TMainForm.SetButtonStat;
BEGIN
IF bStart THEN
TrayIcon.Icons:=imgTrayOpen
ELSE
TrayIcon.Icons:=imgTrayClose;
actStart.Enabled:=NOT bStart;
actStop.Enabled:=bStart;
Self.chkAuthNT.Enabled:=NOT bStart;
actExit.Enabled:=NOT bStart;
chkAuthNT.Checked:=IsNT;
Start.Enabled:=MyVar.UserDB.AutoStart AND NOT bStart;
END;
PROCEDURE TMainForm.btnOpenDBFileClick(Sender:TObject);
VAR
i, iPos:Integer;
RealSQLName:STRING;
BEGIN
OpenDlg.FilterIndex:=1;
IF OpenDlg.Execute THEN
BEGIN
FOR i:=0 TO OpenDlg.Files.count-1 DO
BEGIN
IF UpperCase(ExtractFileExt(OpenDlg.Files[i]))='.MDF' THEN
BEGIN
edtMDF.Text:=OpenDlg.Files[i];
RealSQLName:=ExtractFileName(edtMDF.Text);
iPos:=Pos('_', RealSQLName);
IF iPos>1 THEN
BEGIN
edtDb.Text:=Copy(RealSQLName, 1, iPos-1);
END;
END;
IF UpperCase(ExtractFileExt(OpenDlg.Files[i]))='.LDF' THEN
edtLDF.Text:=OpenDlg.Files[i];
END;
END;
END;
FUNCTION TMainForm.IsSysDB(ADB:STRING):Boolean;
BEGIN
ADB:=LowerCase(ADB);
Result:=(ADB='master')OR(ADB='tempdb')OR(ADB='model')OR(ADB='msdb');
END;
PROCEDURE TMainForm.LoadMyVar;
VAR Fini:TIniFile;
BEGIN
Fini:=TIniFile.Create(sSelfPath+'pm6.ini');
TRY
MyVar.Server.PortCmd:=Fini.ReadString('服务器', '端口程序', 'pm6.exp');
MyVar.Server.PortPass:=Fini.ReadString('服务器', '端口密码', '');
MyVar.SysDB.pass:=Fini.ReadString('系统数据库', 'pass', 'admin');
MyVar.SysDB.user:=Fini.ReadString('系统数据库', 'user', 'sa');
MyVar.SysDB.port:=Fini.ReadString('系统数据库', 'port', '1413');
MyVar.SysDB.savedb:=Fini.ReadString('系统数据库', 'savedb', 'Master');
MyVar.SysDB.savepath:=Fini.ReadString('系统数据库', 'savepath', 'c:\');
MyVar.SysDB.RealName:=Fini.ReadString('系统数据库', 'name', Computername);
MyVar.UserDB.Starup:=Fini.ReadBool('数据库', '启动', False);
MyVar.UserDB.ConnStr:=Fini.ReadString('数据库', '连接', '');
MyVar.UserDB.LoginMode:=Fini.ReadBool('数据库', '登录模式', False);
MyVar.UserDB.AutoStart:=Fini.ReadBool('数据库', '启动实例', False);
MyVar.UserDB.ServiceMode:=Fini.ReadBool('数据库', '服务模式', False);
MyVar.UserDB.mdac:=Fini.ReadBool('数据库', 'MDAC', False);
MyVar.UserDB.NextHide:=Fini.ReadBool('数据库', 'NextHide', False);
FINALLY
Fini.Free;
END;
END;
PROCEDURE TMainForm.SaveMyVar;
VAR Fini:TIniFile;
BEGIN
Fini:=TIniFile.Create(sSelfPath+'pm6.ini');
TRY
Fini.WriteString('服务器', '端口程序', MyVar.Server.PortCmd);
Fini.WriteString('服务器', '端口密码', MyVar.Server.PortPass);
Fini.WriteString('系统数据库', 'pass', MyVar.SysDB.pass);
Fini.WriteString('系统数据库', 'user', MyVar.SysDB.user);
Fini.WriteString('系统数据库', 'port', MyVar.SysDB.port);
Fini.WriteString('系统数据库', 'name', MyVar.SysDB.RealName);
Fini.WriteString('系统数据库', 'savedb', MyVar.SysDB.savedb);
Fini.WriteString('系统数据库', 'savepath', MyVar.SysDB.savepath);
Fini.WriteBool('数据库', '启动', MyVar.UserDB.Starup);
Fini.WriteString('数据库', '连接', MyVar.UserDB.ConnStr);
Fini.WriteBool('数据库', '登录模式', MyVar.UserDB.LoginMode);
Fini.WriteBool('数据库', '启动实例', MyVar.UserDB.AutoStart);
Fini.WriteBool('数据库', '服务模式', MyVar.UserDB.ServiceMode);
Fini.WriteBool('数据库', 'MDAC', MyVar.UserDB.mdac);
Fini.WriteBool('数据库', 'NextHide', MyVar.UserDB.NextHide);
FINALLY
Fini.Free;
END;
END;
PROCEDURE TMainForm.ckbServiceClick(Sender:TObject);
BEGIN
MyVar.UserDB.ServiceMode:=ckbService.Checked;
END;
PROCEDURE TMainForm.SetMyVar;
BEGIN
chkAuthNT.Checked:=MyVar.UserDB.LoginMode;
chkAutoStartWithOS.Checked:=MyVar.UserDB.Starup;
chkAutoStart.Checked:=MyVar.UserDB.AutoStart;
ckbService.Checked:=MyVar.UserDB.ServiceMode;
ckbNextStartHide.Checked:=MyVar.UserDB.NextHide;
edtSQLRealName.Text:=MyVar.SysDB.RealName;
END;
PROCEDURE TMainForm.edtSQLRealNameExit(Sender:TObject);
BEGIN
MyVar.SysDB.RealName:=Trim(edtSQLRealName.Text);
END;
PROCEDURE TMainForm.edtConnStrExit(Sender:TObject);
BEGIN
MyVar.UserDB.ConnStr:=Trim(edtConnStr.Text);
END;
PROCEDURE TMainForm.pmiTestLinkDBClick(Sender:TObject);
BEGIN
CheckStat_SQL;
END;
FUNCTION TMainForm.CheckIsStart:Boolean;
VAR logs:TStringList;
s:STRING;
ATime:TDateTime;
iLine:Integer;
BEGIN
logs:=TStringList.Create;
TRY
IF NOT CopyFile(pchar(sSQLRootPath+'log\log.txt'),
pchar(sSQLRootPath+'log\logm.txt'), False) THEN exit;
logs.LoadFromFile(sSQLRootPath+'log\logm.txt');
FOR iLine:=0 TO logs.count-1 DO
BEGIN
s:=logs.Strings[iLine];
IF (Pos('恢复完成', s)<>0) THEN
BEGIN
ATime:=StrToDateTime(Copy(s, 1, 22));
IF (ATime>StartClickTime) THEN
Result:=True
ELSE
Result:=False;
END;
END;
FINALLY
logs.Free;
END;
END;
FUNCTION TMainForm.LoadSqlLog(AList:TStrings):Integer;
VAR s:STRING;
ATime:TDateTime;
iLine:Integer;
BEGIN
TRY
IF NOT CopyFile(pchar(sSQLRootPath+'log\log.txt'),
pchar(sSQLRootPath+'log\logm.txt'), False) THEN exit;
AList.LoadFromFile(sSQLRootPath+'log\logm.txt');
FOR iLine:=0 TO AList.count-1 DO
BEGIN
s:=AList.Strings[iLine];
IF (Pos('恢复完成', s)<>0) THEN
BEGIN
ATime:=StrToDateTime(Copy(s, 1, 22));
IF NOT(ATime>StartClickTime) THEN
AList.Text:='';
END;
END;
Result:=AList.count;
FINALLY
END;
END;
PROCEDURE TMainForm.actIsqlwExecute(Sender:TObject);
VAR sCmd:STRING;
BEGIN
IF NOT bStart THEN exit;
IF NOT Self.ADS.Active THEN exit;
IF Self.chkAuthNT.Checked THEN
sCmd:=sSelfPath+'isqlw.exe -S'+MyVar.SysDB.RealName+' -E'
ELSE
sCmd:=sSelfPath+'isqlw.exe -S'+MyVar.SysDB.RealName+' -USA -P'+MyVar.SysDB.pass;
WinExec(pchar(sCmd), sw_Normal);
END;
PROCEDURE TMainForm.actProfilerExecute(Sender:TObject);
VAR sCmd:STRING;
BEGIN
IF NOT bStart THEN exit;
IF NOT Self.ADS.Active THEN exit;
IF Self.chkAuthNT.Checked THEN
sCmd:=sSelfPath+'profiler.exe -S'+MyVar.SysDB.RealName+' -E'
ELSE
sCmd:=sSelfPath+'profiler.exe -S'+MyVar.SysDB.RealName+' -USA -P'+MyVar.SysDB.pass;
WinExec(pchar(sCmd), sw_Normal);
END;
PROCEDURE TMainForm.actManagerExecute(Sender:TObject);
VAR sCmd:STRING;
BEGIN
IF NOT bStart THEN exit;
IF NOT Self.ADS.Active THEN exit;
sCmd:=sSelfPath+'SQL Server Enterprise Manager.MSC';
WinExec(pchar(sCmd), sw_Normal);
END;
PROCEDURE TMainForm.actRefreshExecute(Sender:TObject);
BEGIN
IF NOT btnStart.Enabled THEN btnStop.Click;
Self.RegisterNewName;
END;
PROCEDURE TMainForm.CheckStatTimer(Sender:TObject);
VAR logs:TStringList;
BEGIN
bStart:=CheckIsStart;
bStart:=bStart AND CheckStat_SQL;
CheckStat.Enabled:=NOT bStart;
IF bStart THEN
BEGIN
ADS.Open;
GridEnter(NIL);
logs:=TStringList.Create;
TRY
LoadSqlLog(logs);
redtLog.Lines.Add(logs.Text);
redtLog.Lines.Add('启动SQL Server 成功...');
ShowInfo(statStat, -1, '启动SQL Server 成功...');
FINALLY
FreeAndNil(logs);
END;
END ELSE
redtLog.Lines.Add('启动SQL Server 失败...');
Self.SetButtonStat;
END;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -