📄 backup.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Backup.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RecListForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma resource "*.dfm"
TfrmBackup *frmBackup;
//---------------------------------------------------------------------------
__fastcall TfrmBackup::TfrmBackup(TComponent* Owner)
: TRecListForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmBackup::FormShow(TObject *Sender)
{
TComResultSet *BackupDir=NewResultSet();
BackupDir->Open("select CompanyBackupPath from sdCompany where CompanyCode='"+g_sdCompanyCode+"'","CompanyCode");
if(BackupDir->RecordCount>0)
seBackupDir->Text=BackupDir->FieldByName("CompanyBackupPath");
else
seBackupDir->Text="";
BackupDir->Close();
delete BackupDir;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBackup::BtnCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmBackup::BtnBackupClick(TObject *Sender)
{
TComResultSet *Backup;
AnsiString DatabaseName,FileName,UserCode,ExeSql;
int OwnSpid,Spid=-1;
if(seBackupDir->Text.IsEmpty())
{
ShowMessageWindow("备份文件名不能为空",mwsError);
return;
}
if(ExtractFilePath(seBackupDir->Text).IsEmpty())
{
ShowMessageWindow("备份文件名不合法",mwsError);
return;
}
if(ExtractFileExt(seBackupDir->Text).IsEmpty())
seBackupDir->Text=seBackupDir->Text+".dat";
if(FileExists(seBackupDir->Text))
{
if(ShowMessageWindow("该备份文件名已存在,是否覆盖?",mwsConfirmation)==IDNO)
return;
else
DeleteFile(seBackupDir->Text);
}
try
{
StartWaitForm("正在备份数据,请稍候...");
Backup=NewResultSet();
ExeSql="Select OwnSpid=@@Spid" ; //查询当前进程
Backup->Open(ExeSql,"");
if(Backup->RecordCount>0)
{
Backup->MoveFirst();
OwnSpid=Backup->FieldByName("OwnSpid").ToInt();
}
Backup->Close();
if(OwnSpid<0)
throw Exception("不能确认当前进程!");
ExeSql="exec sp_Who" ; //查询当前所连接数据库名
Backup->Open(ExeSql,"");
if(Backup->RecordCount>0)
{
Backup->MoveFirst();
while(!Backup->Eof)
{
Spid=Backup->FieldByName("Spid").ToInt();
if(Spid==OwnSpid)
{
DatabaseName=Backup->FieldByName("dbname");
break;
}
Backup->MoveNext();
}
}
if(DatabaseName.IsEmpty())
throw Exception("不能确认当前连接数据库!");
DatabaseName=DatabaseName.Trim();
FileName=seBackupDir->Text.Trim();
UserCode=g_sdUserCode;
ExeSql=" Exec sddb_Backup '"+DatabaseName+"','"+FileName+"','"+UserCode+"'";
try
{
Backup->Execute(ExeSql);
}
catch(...)
{
ShowMessageWindow("数据备份失败,请重新操作",mwsError);
}
ShowMessageWindow("数据备份完成!",mwsInformation);
Close();
}
__finally
{
EndWaitForm();
delete Backup;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmBackup::seBackupDirButtonClick(TObject *Sender)
{
if(!seBackupDir->Text.IsEmpty())
OpenBackupDialog->FileName=seBackupDir->Text;
if(OpenBackupDialog->Execute())
seBackupDir->Text=OpenBackupDialog->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBackup::InitEditControl()
{
seBackupDir->Text="";
}
void __fastcall TfrmBackup::FormClose(TObject *Sender,
TCloseAction &Action)
{
TRecListForm::FormClose(Sender,Action);
g_ClientComm->DelMsgForm(this->Name);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -