我是选择了备份保存路径之后,点击“数据库备份”,提示“备份成功”,然而进入指定的保存文件夹里面后,却发现数据库没有被备份,我想可能是这几句SQL语句有问题,我顺便把源代码贴出来吧,望各位大虾赐教:
==============================================
==============声明部分========================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzTabs, ComCtrls, StdCtrls, RzLabel, DB, ADODB,IniFiles;type
TForm1 = class(TForm)
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzLabel1: TRzLabel;
Search_B: TButton;
Copy_B: TButton;
Edit1: TEdit;
RadioButton1: TRadioButton;
RzLabel2: TRzLabel;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
StatusBar1: TStatusBar;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure Search_BClick(Sender: TObject);
procedure Copy_BClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
db_name,pathname,path1,db_name1:string;
usename,psw,connectionstring:string; { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
databasename:string;
Ini:TIniFile;begin
Ini:=TInifile.Create(ExtractFileDir(Application.ExeName)+ '\config.INI' );
try
usename:=Ini.ReadString('sqlconfig','usename','sa');
psw:=Ini.Readstring('sqlconfig','psw','1');
connectionstring:=Ini.ReadString('Connection_set','connectionstring','');
// Persist SecurityInfo:=Ini.Readboolean('Form','Persist SecurityInfo',False);
// User ID:=Ini.ReadString('Form','usename','sa');
// Initial Catalog:=Ini.ReadString('Form','usename','data_student');
// Data Source:=Ini.ReadString('Form','usename','LIXIANYING');
// Password:=Ini.ReadString('Form','usename','1');
Ini.Free;
Finally databasename:='data_student';
db_name:='data_student';
StatusBar1.Panels.Items[0].Text:='系统备份/恢复 面板'; end;
if (Trim(Edit1.text)<>'') then
Copy_B.enabled:=True;
ADOQuery1.ConnectionString := connectionstring;
end;
==============================================================
==============================================================
==============================================
其中 “备份”面板就两个按钮
procedure TForm1.Search_BClick(Sender: TObject);begin
if SaveDialog1.Execute then
begin
Edit1.Text:=SaveDialog1.FileName;
pathname:=SaveDialog1.filename;
db_name:=Copy(ExtractFileName(pathname),1 ,Length(ExtractFileName(pathname))-4);
end;
end;procedure TForm1.Copy_BClick(Sender: TObject);begin
{ ADOQuery1:=TADOQuery.create(self);} Copy_B.Enabled:=false;
StatusBar1.Panels.Items[0].Text:='备份中';
if(Trim(db_name)<>'') then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));
try
//ADOQuery1.Open;
ADOQuery1.ExecSQL;
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败!';
Abort;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
try
ADOQuery1.ExecSQL;
showmessage('备份成功');
StatusBar1.Panels.Items[0].Text:='备份成功';
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败';
Abort;
end; showmessage('应用程序将重启,以完成备份');
ADOQuery1.Free;
Application.Terminate;
end;
end;=================
==============================================
==============声明部分========================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzTabs, ComCtrls, StdCtrls, RzLabel, DB, ADODB,IniFiles;type
TForm1 = class(TForm)
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzLabel1: TRzLabel;
Search_B: TButton;
Copy_B: TButton;
Edit1: TEdit;
RadioButton1: TRadioButton;
RzLabel2: TRzLabel;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
StatusBar1: TStatusBar;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure Search_BClick(Sender: TObject);
procedure Copy_BClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
db_name,pathname,path1,db_name1:string;
usename,psw,connectionstring:string; { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
databasename:string;
Ini:TIniFile;begin
Ini:=TInifile.Create(ExtractFileDir(Application.ExeName)+ '\config.INI' );
try
usename:=Ini.ReadString('sqlconfig','usename','sa');
psw:=Ini.Readstring('sqlconfig','psw','1');
connectionstring:=Ini.ReadString('Connection_set','connectionstring','');
// Persist SecurityInfo:=Ini.Readboolean('Form','Persist SecurityInfo',False);
// User ID:=Ini.ReadString('Form','usename','sa');
// Initial Catalog:=Ini.ReadString('Form','usename','data_student');
// Data Source:=Ini.ReadString('Form','usename','LIXIANYING');
// Password:=Ini.ReadString('Form','usename','1');
Ini.Free;
Finally databasename:='data_student';
db_name:='data_student';
StatusBar1.Panels.Items[0].Text:='系统备份/恢复 面板'; end;
if (Trim(Edit1.text)<>'') then
Copy_B.enabled:=True;
ADOQuery1.ConnectionString := connectionstring;
end;
==============================================================
==============================================================
==============================================
其中 “备份”面板就两个按钮
procedure TForm1.Search_BClick(Sender: TObject);begin
if SaveDialog1.Execute then
begin
Edit1.Text:=SaveDialog1.FileName;
pathname:=SaveDialog1.filename;
db_name:=Copy(ExtractFileName(pathname),1 ,Length(ExtractFileName(pathname))-4);
end;
end;procedure TForm1.Copy_BClick(Sender: TObject);begin
{ ADOQuery1:=TADOQuery.create(self);} Copy_B.Enabled:=false;
StatusBar1.Panels.Items[0].Text:='备份中';
if(Trim(db_name)<>'') then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));
try
//ADOQuery1.Open;
ADOQuery1.ExecSQL;
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败!';
Abort;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
try
ADOQuery1.ExecSQL;
showmessage('备份成功');
StatusBar1.Panels.Items[0].Text:='备份成功';
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败';
Abort;
end; showmessage('应用程序将重启,以完成备份');
ADOQuery1.Free;
Application.Terminate;
end;
end;=================
是这一句要改
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));=================================
还是这一句要改呢
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
==================================
“加上此选项”是加上 backup database 数据库 to disk='c:\你的备份文件名' with init
还是只要加上 ='c:\你的备份文件名' with init
呀?
function pBackupDataBase(DataBaseName, BackupFileName : String) : Boolean;
var
TempTab : TADOQuery;
begin
if FileExists(BackupFileName) then DeleteFile(BackupFileName); TempTab := TADOQuery.Create(nil);
try
TempTab.Connection := pvADOConn; //连接
TempTab.SQL.Add('USE '+DataBaseName);
TempTab.SQL.Add('BACKUP DATABASE '+DataBaseName+' TO DISK = '''+ BackupFileName+'''');
TempTab.ExecSQL;
TempTab.Free;
Result := True;
except
TempTab.Free;
Result := False;
end;
end;
只有恢复时才需要
参考如下
ExecuteSql('use master');
ExecuteSql(Format('BACKUP DATABASE %s TO DISK = ''%s'' with REWIND',[g_sDefaultdb,FileName]));
ExecuteSql(format('backup log %s with no_log',[g_sDefaultdb]));
ExecuteSql(Format('use %s',[g_sDefaultdb]));