📄 dr_main.pas
字号:
unit DR_Main;
{
代码单元名称:通用数据库恢复工具主窗口
从属软件:大连资金清算中心打码机管理信息系统
开发单位:大连理工大学计算机技术研究所软件工程研究室
作者:王树润
时间:2001,1,30
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Grids, DBGrids, ExtCtrls, Db, ADODB;
type
TDR_DfmMain = class(TForm)
PageControl1: TPageControl;
GeneralTabSheet: TTabSheet;
OptionTabSheet: TTabSheet;
ConfirmButton: TButton;
Button2: TButton;
Button3: TButton;
RestoreModeRadioGroup: TRadioGroup;
BackupHistoryGroupBox: TGroupBox;
BackupHistoryDBGrid: TDBGrid;
BackupDeviceGroupBox: TGroupBox;
DestinationListBox: TListBox;
FullBackupTimeComboBox: TComboBox;
Label4: TLabel;
AfterRestoreStatusRadioGroup: TRadioGroup;
GroupBox1: TGroupBox;
ReplaceDatabaseCheckBox: TCheckBox;
DestinationDatabaseMemo: TMemo;
Label1: TLabel;
SourceDatabaseMemo: TMemo;
Label3: TLabel;
Label2: TLabel;
RestoreDatabaseNameComboBox: TComboBox;
Label5: TLabel;
AfterRestorDatabaseNameComboBox: TComboBox;
Button4: TButton;
Button5: TButton;
DBGrid1: TDBGrid;
Label6: TLabel;
Animate1: TAnimate;
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RestoreModeRadioGroupClick(Sender: TObject);
procedure RestoreDatabaseNameComboBoxChange(Sender: TObject);
procedure FullBackupTimeComboBoxChange(Sender: TObject);
procedure ConfirmButtonClick(Sender: TObject);
procedure ReplaceDatabaseCheckBoxClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure AfterRestorDatabaseNameComboBoxChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TADOQueryAfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
MyServerName: string;
DatabaseNames: Tstrings;
procedure ReplaceDatabaseCheck;
end;
procedure SetWork;
implementation
uses DR_AddBackupDevice, DR_DataModule1, Main, PublicUnit;
{$R *.DFM}
procedure SetWork;
var
DR_DfmMain: TDR_DfmMain;
ServerName: string;
begin
if
MessageDlg('该项功能必须在数据库所在的机器上进行,您当前的机器是数据库所在的机器吗?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
Exit;
if
MessageDlg('请确定所有与数据库的连接包括其它机器上本软件的运行是否都已终止?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
Exit;
ServerName := FrmMain.ServerName;
FrmMain.Refresh;
if ServerName = '' then
Exit;
Screen.Cursor := crHourGlass;
FrmMain.Refresh;
Application.CreateForm(TDR_DfmMain, DR_DfmMain);
DR_DfmMain.MyServerName := ServerName;
Screen.Cursor := crDefault;
DR_DfmMain.ShowModal;
DR_DfmMain.Free;
end;
//窗体==========================================================================
procedure TDR_DfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DatabaseNames.Free;
DR_DfmDataModule1.RestoreDatabaseADOQuery.Close;
DR_DfmDataModule1.FullBackupTimeADOQuery.Close;
DR_DfmDataModule1.BackupHistoryADOQuery.Close;
DR_DfmDataModule1.ADOConnection1.Close;
DR_DfmDataModule1.ADOConnection2.Close;
end;
procedure TDR_DfmMain.FormShow(Sender: TObject);
var
i: integer;
begin
Screen.Cursor := crHourGlass;
Refresh;
DR_DfmDataModule1.ADOConnection1.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.DbUser
+
';Password=' + FrmMain.DbPass + ';Initial Catalog=master;Data Source=' +
PublicUnit.ServerName;
DR_DfmDataModule1.ADOConnection2.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.DbUser
+
';Password=' + FrmMain.DbPass + ';Initial Catalog=msdb;Data Source=' +
PublicUnit.ServerName;
DatabaseNames := TStringList.Create;
with DR_DfmDataModule1.RestoreDatabaseADOQuery do
begin
Close;
Sql.Clear;
Sql.Add('Select * From SysDatabases');
try
Open;
except
Screen.Cursor := crDefault;
ShowMessage('系统数据库受到破坏,请与系统管理员联系!');
Exit;
end;
Last;
AfterRestorDatabaseNameComboBox.Items.Add(FrmMain.DbName);
RestoreDatabaseNameComboBox.Items.Add(FrmMain.DbName);
while not Bof do
begin
DatabaseNames.Add(FieldByName('Name').AsString);
Prior;
end;
end;
AfterRestorDatabaseNameComboBox.ItemIndex := 0;
RestoreDatabaseNameComboBox.ItemIndex := 0;
RestoreModeRadioGroup.ItemIndex := 0;
BackupHistoryGroupBox.Visible := True;
BackupDeviceGroupBox.Visible := False;
FullBackupTimeComboBox.Items.Clear;
with DR_DfmDataModule1.FullBackupTimeADOQuery do
begin
Close;
Sql.Clear;
Sql.Add('Select backup_start_date ');
Sql.Add('From BackupSet ');
Sql.Add('Where Type=''D'' ');
Sql.Add('And database_name=''' + RestoreDatabaseNameComboBox.Text + '''');
try
Open;
except
Screen.Cursor := crDefault;
ShowMessage('系统数据库受到破坏,请与系统管理员联系!');
Exit;
end;
Last;
while not Bof do
begin
FullBackupTimeComboBox.Items.Add(FieldByName('backup_start_date').AsString);
Prior;
end;
end;
FullBackupTimeComboBox.ItemIndex := 0;
with DR_DfmDataModule1.BackupHistoryADOQuery do
begin
Close;
Sql.Clear;
if FullBackupTimeComboBox.Items.IndexOf(FullBackupTimeComboBox.Text) = 0
then
Sql.Add('Select * From BackupSet Where backup_start_date>=''' +
FullBackupTimeComboBox.Text + ''' and database_name=''' +
RestoreDatabaseNameComboBox.Text + '''')
else
Sql.Add('Select * From BackupSet Where backup_start_date>=''' +
FullBackupTimeComboBox.Text + ''' and backup_start_date<''' +
FullBackupTimeComboBox.Items[FullBackupTimeComboBox.Items.IndexOf(FullBackupTimeComboBox.Text) - 1] + ''' and database_name=''' + RestoreDatabaseNameComboBox.Text +
'''');
try
Open;
except
ShowMessage('error');
Exit;
end;
FieldByName('backup_set_id').Visible := False;
FieldByName('backup_set_uuid').Visible := False;
FieldByName('media_set_id').Visible := False;
FieldByName('first_family_number').Visible := False;
FieldByName('first_media_number').Visible := False;
FieldByName('last_family_number').Visible := False;
FieldByName('last_media_number').Visible := False;
FieldByName('catalog_family_number').Visible := False;
FieldByName('catalog_media_number').Visible := False;
FieldByName('position').Visible := False;
FieldByName('expiration_date').Visible := False;
FieldByName('software_vendor_id').Visible := False;
FieldByName('description').Visible := False;
FieldByName('user_name').Visible := False;
FieldByName('software_major_version').Visible := False;
FieldByName('software_minor_version').Visible := False;
FieldByName('software_build_version').Visible := False;
FieldByName('time_zone').Visible := False;
FieldByName('mtf_minor_version').Visible := False;
FieldByName('First_Lsn').Visible := False;
FieldByName('Last_Lsn').Visible := False;
FieldByName('Checkpoint_Lsn').Visible := False;
FieldByName('Database_Backup_Lsn').Visible := False;
FieldByName('database_creation_date').Visible := False;
FieldByName('backup_start_date').Visible := False;
FieldByName('sort_order').Visible := False;
FieldByName('code_page').Visible := False;
FieldByName('compatibility_level').Visible := False;
FieldByName('database_version').Visible := False;
FieldByName('machine_name').Visible := False;
FieldByName('name').DisplayLabel := '备份后库名';
FieldByName('backup_finish_date').DisplayLabel := '备份完成时间';
FieldByName('type').DisplayLabel := '备份类型';
FieldByName('backup_size').DisplayLabel := '备份容量';
FieldByName('database_name').DisplayLabel := '数据库名称';
FieldByName('server_name').DisplayLabel := '服务器名称';
end;
BackupHistoryDBGrid.DataSource := DR_DfmDataModule1.BackupHistoryDataSource;
for i := 0 to BackupHistoryDBGrid.FieldCount - 1 do
BackupHistoryDBGrid.Fields[i].DisplayWidth := 1;
AfterRestoreStatusRadioGroup.ItemIndex := 1;
ReplaceDatabaseCheckBox.Checked := False;
DestinationDatabaseMemo.ReadOnly := True;
DR_DfmDataModule1.BackupDeviceContentADOQuery.AfterScroll :=
TADOQueryAfterScroll;
Screen.Cursor := crDefault;
end;
//关闭==========================================================================
procedure TDR_DfmMain.Button2Click(Sender: TObject);
begin
Close;
end;
//选择恢复方式==================================================================
procedure TDR_DfmMain.RestoreModeRadioGroupClick(Sender: TObject);
begin
ReplaceDatabaseCheck;
if RestoreModeRadioGroup.ItemIndex = 0 then
begin
BackupHistoryGroupBox.Visible := True;
BackupDeviceGroupBox.Visible := False;
end;
if RestoreModeRadioGroup.ItemIndex = 1 then
begin
BackupHistoryGroupBox.Visible := False;
BackupDeviceGroupBox.Visible := True;
end;
end;
//添加备份设备==================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -