如何备份SQL数据与恢复数据,希望给出代码或用DELPHI7编的备份那一整块发到邮箱中,谢谢,虽然分分数不是很多,但还是希望你们能帮忙
解决方案 »
- [新手求助]日期数据录入数据库的问题!
- 怎么样压缩图片?急...
- 寻求一个算法问题,有代码更好。谢谢!
- 关于ListView的问题,还望指教!
- 如何在程序里控制打印纸张大小(A3,A4)和打印方向?不想打开设置窗口
- Delphi6带的InstallShield Express - Borland Limited! 快来下载!!!!
- 运行delphi 的时候弹出找不到Teedragpoint.duc怎么解决?求大神帮忙
- 关于数据汇总的问题
- 自己的ip?
- DELPHI 或VB 高手 高分奉送
- 如何把本地文件上传到局域网另一台机器的一个IIS目录下面?
- 在access数据库中只要有“マイ フレンド”,如果在查询语句中使用了"name like '%王%'",那么就会出现内存溢出的问题,怎么解决啊?
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('BACKUP DATABASE '+backdatabasename+' TO DISK ='+backtofileandpath);
ADOQuery2.ExecSQL;backdatabasename是你要备份的数据库名,backtofileandpath是要备份成的文件。恢复:
if OpenDialog1.Execute then
begin
dsdbname:='"'+ADOQuery1.fieldbyname('name').asstring+'"';//目的数据库
dspath:=ExtractFilePath(ADOQuery1.fieldbyname('filename').asstring);//目的数据库文件物理位置
if Application.MessageBox(
pchar('警告,数据库:'+dsdbname+'的原有数据将被覆盖,而且不可恢复确定吗?'),
pchar('警告'),MB_YesNo+MB_ICONWARNING+MB_DEFBUTTON2)<>IDYes then exit; datafilename:=OpenDialog1.FileName;//源数据库文件
ADOQuery2.close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('RESTORE FILELISTONLY FROM DISK =');
ADOQuery2.SQL.Add(''''+datafilename+'''');
ADOQuery2.Open;
adoquery3.SQL.clear;
adoquery3.SQL.Add('RESTORE DATABASE'+dsdbname);
adoquery3.SQL.Add(' FROM DISK = '+''''+datafilename+'''');
ADOQuery3.SQL.Add('WITH Replace, MOVE '+''''+ADOQuery2.fieldbyname('logicalname').AsString+''''+
' TO '+''''+dspath+ExtractFileName(ADOQuery2.fieldbyname('physicalname').AsString)+'''');
ADOQuery2.next;
ADOQuery3.SQL.Add(', Move '+''''+ADOQuery2.fieldbyname('logicalname').AsString+''''+
' TO '+''''+dspath+ExtractFileName(ADOQuery2.fieldbyname('physicalname').AsString)+'''');
adoquery3.ExecSQL;
Application.MessageBox(pchar('恢复操作成功!'),'',MB_OK+MB_ICONINFORMATION);
end;adoquery1的sql语句select * from sysdatabases,用于查询系统的数据库列表。
不可能,多用户情况下,use master是没用的
这个我知道,可以不用停。我在以前的帖子找到这段代码,我能看懂:
with Query1 do //备份数据库到文件
begin
Close;
SQL.Clear;
SQL.Text := 'backup database yourdatabasename to disk = :FileName';
Parameters.parambyname('FileName').value := strFileName;
Execsql;
end;with Query1 do //从以前的备份中恢复数据库;
begin
Close;
SQL.clear;
SQL.text := 'restore database yourdatabasename from disk = :FileName';
Parameters.parambyname('FileName').value := strFileName;
Execsql;
end;可是问题是:
我要做成用户可以备份多次,每次为一个独立文件(就是SQL里的备份设备吧),文件名为当前系统的日期和时间。路径默认为相对于软件安装目录下的BACKUP目录。
在恢复时用户可以在下拉框里选择要恢复的独立文件。
所以,以上代码似乎没有我说的一些功能噢???上面的代码是备份数据库为一个独立文件吗?
当然最重要的,备份和恢复时都不要停掉sqlserver。
adoquery1.text:='SHUTDOWN WITH NOWAIT'
adoquery1.ExecSQL;
就行了,kill多可怕,不过偶不知道怎么用代码重新启动sqlserver
该命令可以对指定表进行备份、恢复操作。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, StrUtils, ComCtrls, ExtCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Button4: TButton;
Button3: TButton;
SaveDialog1: TSaveDialog;
ADOQuery_backup: TADOQuery;
ProgressBar1: TProgressBar;
Button1: TButton;
Edit4: TEdit;
ADOConnection1: TADOConnection;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
edit2.Text:=ExtractFilePath(paramstr(0))+'数据库名.MDF';
edit3.Text:=ExtractFilePath(paramstr(0))+'数据库名.LDF';
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if savedialog1.Execute then
begin edit2.Text:=saveDialog1.FileName;
if (RightStr(saveDialog1.FileName,4)<>'.MDF')or(RightStr(saveDialog1.FileName,4)<>'.mdf') then
edit2.Text :=edit2.Text +'.MDF';
end;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
if savedialog1.Execute then
begin
edit3.Text:=saveDialog1.FileName;
if (RightStr(saveDialog1.FileName,4)<>'.LDF')or(RightStr(saveDialog1.FileName,4)<>'.ldf') then
edit3.Text :=edit3.Text +'.LDF';
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
try
if not adoconnection1.Connected then
begin
showmessage('请先连接SQL SERVER数据库');
exit;
end;
if (edit2.Text='') or (edit3.Text ='') or (edit1.Text ='') then
begin
showmessage('请设置SQL Server数据库路径!');
exit;
end;
if messagebox(self.Handle,'创建数据库前请先检查数据库是否已经创建!' + chr(13) + '是否确定创建数据库?','提示',MB_YESNO + MB_ICONWARNING)=IDYES then
begin
self.Cursor:=crHourGlass;
ProgressBar1.Position:=0;
timer1.Enabled:=true;
try
//RESTORE DATABASE TestDB FROM DISK = 'c:\TestDB.dat' WITH MOVE 'TestDB_Data' TO '数据库数据物理文件(TestDB_Data.MDF)路径' , MOVE 'TestDB_Log' TO '数据库数据日记文件(TestDB_Log.LDF)路径'
ADOQuery_backup.SQL.Add('CREATE DATABASE '+ edit1.Text +' '+
'ON ( NAME = ' + edit1.text + '_Data, FILENAME = '+#39+edit2.Text+#39 +') '+
'LOG ON '+
'( NAME = ' + edit1.Text + '_Log,'+
' FILENAME = '+
#39+edit3.Text +#39+')');
ADOQuery_backup.ExecSQL;
ADOQuery_backup.SQL.Clear;
ADOQuery_backup.SQL.Add('restore database '+edit1.Text+' from disk =' +
#39 + ExtractFilePath(paramstr(0))+ 'data.bak' + #39 + ' with MOVE ' +
#39 + edit1.text + '_Data' +
#39 + ' TO ' + #39 + edit2.Text + #39 + ' , MOVE ' + #39 +
edit1.Text+'_Log' + #39 + ' TO '+#39+ edit3.Text + #39);
ADOQuery_backup.ExecSQL;
ProgressBar1.Position:=ProgressBar1.Max;
showmessage('创建数据库成功!');
except
showmessage('创建数据库失败!请检查与SQL SERVER 服务器的连接!');
timer1.Enabled:=false;
ProgressBar1.Position:=0;
end;
end;
except on e:ewriteerror do
begin
showmessage('创建数据库失败!请检查与SQL SERVER 服务器的连接!');
timer1.Enabled:=false;
ProgressBar1.Position:=0;
end;
end;
self.Cursor:=crDefault;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
try
adoconnection1.Close;
adoconnection1.ConnectionString:=adodb.promptdatasource(handle,'');
edit4.Text:=adoconnection1.ConnectionString;
adoconnection1.Open;
if adoconnection1.Connected then
showmessage('数据库连接成功');
except
showmessage('数据库连接失败');
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ProgressBar1.Position<ProgressBar1.Max then
ProgressBar1.Position:=ProgressBar1.Position+1
else
timer1.Enabled:=false;
end;end.无注释,抱歉。
你能做出来发到
winExec(Pchar('sqlservr.exe -c'),sw_Hide) 用以启动SQL SERVER