⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 改写的sql2000管理器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -