有关在程序中实现SQL Server数据库备份的问题。想在程序中实现数据库的备份与恢复。希望将代码写的详细一些。谢谢!
解决方案 »
- 三行简单代码也有异常!XML DocumentElement
- 请那位哥子帮解释一下这两句,不好意思(别人会的我也想弄懂,但是又太笨)
- 请问DBNAVIGATOR控件的每个BUTTON是怎么引用的?
- 如何使用INI文件存储使用数据
- 如何把一个窗体做成透明窗体?
- 没有用过DELPHI的菜鸟问题!!怎么实现li_RtnInt := abyte_Source[1]*256 + abyte_Source[0];
- 打印机返回错误参数
- ComboBox.items.addobject?? 急急
- 如何才能让dbgril1能正常显示SQL语句中的汉字或者特殊字符?
- 请问ADO通过ODBC连接数据库后在客户端(WINP8)发布的时候,除SQL SERVER,EXE,还需要什么支持?
- delphi与面试有感!!!
- Borland® Delphi™ 8 for the .NET Now Shipping>>>>>>>>>
unit back_database;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls,Buttons,
Gauges, DB, ADODB, ExtCtrls, StdCtrls;type
TF_bakdatabase = class(TForm)
StatusBar1: TStatusBar;
Panel1: TPanel;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Timer1: TTimer;
T_back: TTabSheet;
Label1: TLabel;
Image1: TImage;
Cmb_database_name: TComboBox;
r_bfxx: TRadioGroup;
GroupBox1: TGroupBox;
b_addpath: TSpeedButton;
b_delete: TSpeedButton;
ListBox1: TListBox;
r_cx: TRadioGroup;
g_jd: TProgressBar;
S_deletedevice: TADOStoredProc;
S_adddevice: TADOStoredProc;
Q_backdatabase: TADOQuery;
S_database: TSaveDialog;
T_page: TPageControl;
ado_connect_restore: TADOConnection;
Q_database_name: TADOQuery;
procedure FormShow(Sender: TObject);
procedure b_addpathClick(Sender: TObject);
procedure b_deleteClick(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure SpeedButton5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
function dbpath():string;
public
{ Public declarations }
end;var
F_bakdatabase: TF_bakdatabase;
bh:string;
bfsb:string;
implementationuses Unit3;{$R *.dfm}
function TF_bakdatabase.dbpath:string;
begin
result:=extractfilepath(application.ExeName)+'\db.txt';
end;
procedure TF_bakdatabase.FormShow(Sender: TObject);
begin
listbox1.Items.LoadFromFile(dbpath());
listbox1.ItemIndex:=0;
with Q_database_name do
begin
close;
sql.Clear ;
sql.Add('select name from master.dbo.sysdatabases'); //从master.dbo.sysdatabases系统库中获得数据库名称列表
open;
end;
cmb_DataBase_name.Items.Clear;
while not Q_database_name.Eof do //添加数据库列表进列表框
begin
cmb_DataBase_name.Items.Add(Q_database_name.fieldbyname('name').AsString );
Q_database_name.Next ;
end;
cmb_DataBase_name.ItemIndex:=0; if cmb_DataBase_name.Items.Count<=0 then
exit;
cmb_database_name.ItemIndex:=cmb_database_name.Items.Count-1 ;
q_database_name.Close;
end;procedure TF_bakdatabase.b_addpathClick(Sender: TObject);
begin
if s_database.Execute then
listbox1.Items.Append(s_database.FileName);
listbox1.ItemIndex:=listbox1.Items.Count-1 ;
listbox1.Items.SaveToFile (dbpath());end;procedure TF_bakdatabase.b_deleteClick(Sender: TObject);
begin
if application.MessageBox('你确定要删除该备份吗?','请注意...',mb_iconwarning+mb_yesno)=idyes then
begin
if fileexists(trim(listbox1.Items.Strings[listbox1.Itemindex])) then
deletefile(trim(listbox1.Items.Strings[listbox1.Itemindex]));
listbox1.Items.Delete(listbox1.ItemIndex);
listbox1.Items.SaveToFile (dbpath());
listbox1.Itemindex:=0;
end;
end;procedure TF_bakdatabase.SpeedButton4Click(Sender: TObject);
var
back_sql_Str:string;
begin
g_jd.Position :=0;
if (trim(cmb_database_name.Text)='master') and (r_bfxx.ItemIndex=1) then
begin
application.MessageBox('系统库Master不能进行增量备份,只能进行完全备份!','曲靖师范学院机房管理系统:',mb_iconerror+mb_ok);
exit;
end;
back_sql_str:='backup database '+trim(cmb_database_name.Text)+' to disk='+''''+trim(listbox1.Items.Strings[listbox1.Itemindex])+''''+' with stats=10';
statusbar1.Panels[0].Text :='正在进行备份,请稍后...';
if listbox1.Items.Count=0 then
begin
application.MessageBox('你还没有进行备份路径的选择!','机房系列系统:',mb_iconwarning+mb_ok);
exit;
end;
screen.Cursor:=crHourGlass;
if r_bfxx.ItemIndex=1 then
begin
back_sql_str:='backup database '+trim(cmb_database_name.Text)+' to disk='+''''+trim(listbox1.Items.Strings[listbox1.Itemindex])+''''+' with DIFFERENTIAL,stats=10';//增量备份
if r_cx.ItemIndex =1 then
back_sql_str:='backup database '+trim(cmb_database_name.Text)+' to disk='+''''+trim(listbox1.Items.Strings[listbox1.Itemindex])+''''+' with init,DIFFERENTIAL,stats=10';//增量备份
end
else
if r_cx.ItemIndex =1 then
back_sql_str:='backup database '+trim(cmb_database_name.Text)+' to disk='+''''+trim(listbox1.Items.Strings[listbox1.Itemindex])+''''+' with init,format,DIFFERENTIAL,stats=10';//增量备份timer1.Enabled :=true;
with q_backdatabase do
begin
close;
sql.Clear ;
sql.Add(back_sql_str);
ExecSQL;
timer1.Enabled :=false;
g_jd.Position :=100;
screen.Cursor:=crarrow;
statusbar1.Panels[0].Text :='备份完成';
close;
end;end;
procedure TF_bakdatabase.Timer1Timer(Sender: TObject);
begin
g_jd.Position :=g_jd.Position +13;
end;procedure TF_bakdatabase.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
g_jd.Position :=0;
statusbar1.Panels[0].Text:='';
end;procedure TF_bakdatabase.SpeedButton5Click(Sender: TObject);
begin
close;
end;procedure TF_bakdatabase.FormCreate(Sender: TObject);
begin
ado_connect_restore.ConnectionString:=dm1.ADOConnection1.ConnectionString;
ado_connect_restore.Connected:=true;
end;end.