/////////备份////////////////////////// procedure TForm18.BitBtn1Click(Sender: TObject); begin adoquery1.Close; try with adoquery1 do begin close; sql.Clear; sql.add('backup database mdf to disk=''c:\back1.bak'''); execsql; end; showmessage('备份完成'); except on e:exception do showmessage('备份失败'); end; end;///////////////还原/////////////////////////// procedure TForm18.BitBtn2Click(Sender: TObject); begin adoquery1.Close; try with adoquery1 do begin close; sql.Clear; sql.add('restore database mdf from disk=''c:\back1.bak'''); execsql; end; showmessage('还原成功'); except on e:exception do showmessage('还原失败'); end; end;
--恢复的时候一定要断开所要恢复的数据库 DM.CLE_Connect.Connected := False; MySQL := 'ALTER DATABASE DB_CLE SET OFFLINE WITH ROLLBACK IMMEDIATE'; with ADOQueryRestor do begin Close; SQL.Clear; SQL.Text := MySQL; try ExecSQL; except end; end; RestorStr := 'RESTORE DATABASE DB_CLE FROM DISK = ''' + Trim(e_lj.Text) + ''' WITH REPLACE'; with ADOQueryRestor do begin Close; SQL.Clear; SQL.Text := RestorStr; try ExecSQL; Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation); except Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError); end; end; MySQL := 'ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE'; with ADOQueryRestor do begin Close; SQL.Clear; SQL.Text := MySQL; try ExecSQL; except end; end; DM.CLE_Connect.Connected := True;
procedure TForm18.BitBtn1Click(Sender: TObject);
begin
adoquery1.Close;
try
with adoquery1 do
begin
close;
sql.Clear;
sql.add('backup database mdf to disk=''c:\back1.bak''');
execsql;
end;
showmessage('备份完成');
except
on e:exception do
showmessage('备份失败');
end;
end;///////////////还原///////////////////////////
procedure TForm18.BitBtn2Click(Sender: TObject);
begin
adoquery1.Close;
try
with adoquery1 do
begin
close;
sql.Clear;
sql.add('restore database mdf from disk=''c:\back1.bak''');
execsql;
end;
showmessage('还原成功');
except
on e:exception do
showmessage('还原失败');
end;
end;
DM.CLE_Connect.Connected := False;
MySQL := 'ALTER DATABASE DB_CLE SET OFFLINE WITH ROLLBACK IMMEDIATE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
RestorStr := 'RESTORE DATABASE DB_CLE FROM DISK = ''' + Trim(e_lj.Text) + ''' WITH REPLACE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := RestorStr;
try
ExecSQL;
Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation);
except
Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError);
end;
end;
MySQL := 'ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
DM.CLE_Connect.Connected := True;
a.数据库中的表格是选择性备份,不是整个数据库都备份,整个备份、恢复俺会。
b.讨论下俺的思路:
首先要将备份的表格选择出来, 通过SQL语句查询出一个个表格数据,再将所有数据压缩成一个
.dat文件或别的文件。
问题在于:
1.所有数据在一个文件中,如何区分不同表格数据?
2.如何区分备份表格与恢复表格字段类型一致?
那先查查SQL SERVER联机帮助先撒...
偶好象是没找到..
';Persist Security Info=True;User ID='+USER.Text+
';Initial Catalog='+DATABASE.Text+
';Data Source='+IP.Text;
with adocommand1 do//用ADocommand控件
begin
CommandText:='use Master';//
Execute;
CommandText:='execute sp_helpdevice';//系统存储过程
Execute;
CommandText:='backup database '+DATABASE.Text+' to disk='''+EX.Text+''' with init';
Execute;
CommandText:='Use '+B_DATABASE.Text;//这行应当是这样
Execute;
';Persist Security Info=True;User ID='+R_USER.Text+
';Initial Catalog=Master'+//B_DATABASE.Text
';Data Source='+R_IP.Text;
with adocommand1 do//用AdoCommand控件
begin
CommandText:='use Master';
Execute;
CommandText:='execute sp_helpdevice';
Execute ;
CommandText:='Restore database '+R_DATABASE.Text+' From disk='''+R_EX.Text+''' with replace';//这行应当是这样
Execute ;
end;
begin
CommandText:='use Master';//
Execute;
CommandText:='execute sp_helpdevice';//系统存储过程
Execute ;
CommandText:='backup database '+'db_name'+' to disk='''+FileName+''' with init';//这行应当是这样
Execute ;
CommandText:='Use '+'db_name';//这行应当是这样
Execute ;
application.MessageBox('已经成功备份数据库','数据库备份',MB_OK + MB_ICONINFORMATION);
end;
恢复:
with adocommand1 do//用AdoCommand控件
begin
CommandText:='use Master';
Execute;
CommandText:='execute sp_helpdevice';
Execute ;
CommandText:='Restore database '+'db_name'+' From disk='''+'c:\data1.bak'+''' with replace';//这行应当是这样
Execute ;
CommandText:='Use '+'db_name';//这行应当是这样
Execute ;
application.MessageBox('已经成功恢复数据库','数据库恢复',MB_OK + MB_ICONINFORMATION);
end;*注:db_name指数据库的名称