有关在程序中实现SQL Server数据库备份的问题。如果分不够可以再加。

women1122 2003-12-22 02:54:44
有关在程序中实现SQL Server数据库备份的问题。想在程序中实现数据库的备份与恢复。希望将代码写的详细一些。谢谢!
...全文
13 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyh149129 2003-12-22
  • 打赏
  • 举报
回复
刚刚写的一段代码:试试看应该可以的
unit back_database;

interface

uses
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;
implementation

uses 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.
VeryOldMan 2003-12-22
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2577/2577001.xml?temp=7.671535E-03
cxz7531 2003-12-22
  • 打赏
  • 举报
回复
用企业管理器作一次备份,用事件探查器截获sql语句,然后在程序中实现就可以了。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧