再delphi如何备份数据。和还原数据,举实例

sql server的也是别人的代码
//备份
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
StatusBar1.SimpleText := '正在备份中...';
//label1.Caption:='正在备份中...';
pgbar.Max := 100;
pgbar.Min := 0;
pgbar.Position := 0;
pgbar.Step := 20;
savedialog1.Title:='备份到:';
with SaveDialog1 do
begin
filename := database + FormatDateTime('yy-MM-dd-hh-mm-ss', Now);
options := [ofhidereadonly, offilemustexist, ofpathmustexist];
if execute then
begin
dm.ADOConnection1.Close;
//TmpStr:= ExtractFileName(filename);
// strlen:= Length(TmpStr);
// DevName:= Copy(TmpStr,1,strlen-4);
begin
try
ADOCommand1.CommandText := 'use Master';
pgbar.StepIt;
ADOCommand1.Execute;
adocommand1.CommandText := 'execute sp_helpdevice';
pgbar.StepIt;
adocommand1.Execute;
pgbar.stepit;
adocommand1.CommandText := 'backup database ' + database + ' to disk=''' + filename + ''' with init';
pgbar.StepIt;
adocommand1.Execute;
adocommand1.CommandText := 'Use ' + database;
pgbar.StepIt;
adocommand1.Execute;
// Self.Hide;
application.MessageBox(pchar('数据库已经成功备份到 ' + filename + '!'), Gsysname, mb_ok + mb_iconinformation);
//ShowMessage();
StatusBar1.SimpleText := '';
pgbar.Position := 0;
try
dm.ADOConnection1.Connected := True;
except
begin
StatusBar1.SimpleText := '';
application.MessageBox('无法重新接连数据库!', Gsysname, mb_ok + mb_iconerror);
abort;
end;
end;
self.Close;
except
on Exception do
if dm.ADOConnection1.InTransaction then
dm.ADOConnection1.RollbackTrans;
end;
end;
end;
end;
end;
//还原
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('请确保无其他程序正在使用本数据库,否则,还原无法进行!',Gsysname,mb_okcancel+mb_iconinformation)=idcancel then
begin
abort;
end;
StatusBar1.SimpleText := '正在还原中...';
pgbar.Max := 100;
pgbar.Min := 0;
pgbar.Position := 0;
pgbar.Step := 20;
opendialog1.Title:='还原为:';
with OpenDialog1 do
begin
filename := '';
options := [ofhidereadonly, offilemustexist, ofpathmustexist];
if execute then
begin
if dm.ADOConnection1.Connected then
dm.ADOConnection1.Close;
sleep(1000);
pgbar.StepIt;
try
ADOCommand1.CommandText := 'use Master';
ADOCommand1.Execute;
sleep(600);
pgbar.StepIt;
adocommand1.CommandText := 'execute sp_helpdevice';
adocommand1.Execute;
sleep(600);
pgbar.stepit;
adocommand1.CommandText := 'Restore database ' + database + ' From disk=''' + filename + ''' with replace';
sleep(600);
pgbar.StepIt;
try
adocommand1.Execute;
except
begin
raise exception.Create(syserrormessage(getlasterror));
abort;
end;
end;
adocommand1.CommandText := 'Use ' + database;
sleep(600);
pgbar.StepIt;
adocommand1.Execute;
StatusBar1.SimpleText := '';
application.MessageBox(pchar('数据库已经成功还原到数据库 ' + database + '!'), Gsysname, mb_ok + mb_iconinformation);
pgbar.Position := 0;
try
dm.ADOConnection1.Connected := True;
except
begin
StatusBar1.SimpleText := '';
application.MessageBox('无法重新接连数据库!', Gsysname, mb_ok + mb_iconerror);
abort;
end;
end;
self.Close;
except
on Exception do
if dm.ADOConnection1.InTransaction then
dm.ADOConnection1.RollbackTrans;
end;
end;
end;
end;

 

 

 

 

还原


首先要断开你连接数据库的全部connection,然后连接数据库到master,在执行你的还原语句


看看这段代码!
var
database:String;
begin
...
...
database:='你的数据库';
try
Screen.Cursor:=crHourGlass;
if mDataModule.ADOConnection1.Connected then
mDataModule.ADOConnection1.Close;
sleep(1000);
ProgressBar2.StepIt;
ADOCommand1.CommandText := 'use Master';
ADOCommand1.Execute;
sleep(600);
ProgressBar2.StepIt;
adocommand1.CommandText := 'execute sp_helpdevice';
adocommand1.Execute;
sleep(600);
ProgressBar2.stepit;
adocommand1.CommandText := 'Restore database ' + database + ' From disk=''' + myFilename + ''' with replace';
sleep(600);
ProgressBar2.StepIt;
try
adocommand1.Execute;
except
begin
raise exception.Create(syserrormessage(getlasterror));
abort;
end;
end;
adocommand1.CommandText := 'Use ' + database;
sleep(600);
ProgressBar2.StepIt;
adocommand1.Execute;
StatusBar1.SimpleText := '';
application.MessageBox(pchar('数据库已经成功还原到数据库 ' + database + '!'), '提示', mb_ok + mb_iconinformation);
ProgressBar2.Position := 0;
try
mDataModule.ADOConnection1.Connected := True;
except
begin
application.MessageBox('无法重新接连数据库!', '提示', mb_ok + mb_iconerror);
abort;
end;
end;
except
Application.MessageBox('有别的程序(如企业管理器)正在使用本数据库,数据无法恢复','提示',MB_OK+MB_IconInformation);
end;
StatusBar1.SimpleText := '';
frmMain.GetReportDate;
Screen.Cursor:=crArrow;
Self.Close;
end;


 

 

 

 

请问上面的大哥oracle数据库里面的表是怎么备份的呢?


hacking


Exp system/manager@ORCL File=D:/Exp.DMP Log=D:/Exp.log //导出所有对象
imp system/manager@ORCL file=D:/Exp.DMP log=D:/Exp.log //导入所有对象


czx0514


delphi里如何写牙


bigben2008


WinExec();
里面的字符串可以自己组织的。


yinweixian


用控件adocommand,备份是backup,还原是restore


fhuibo


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
StatusBar1.SimpleText := '正在备份中...';
//label1.Caption:='正在备份中...';
pgbar.Max := 100;
pgbar.Min := 0;
pgbar.Position := 0;
pgbar.Step := 20;
savedialog1.Title:='备份到:';
with SaveDialog1 do
begin
filename := database + FormatDateTime('yy-MM-dd-hh-mm-ss', Now);
options := [ofhidereadonly, offilemustexist, ofpathmustexist];
if execute then
begin
dm.ADOConnection1.Close;
//TmpStr:= ExtractFileName(filename);
// strlen:= Length(TmpStr);
// DevName:= Copy(TmpStr,1,strlen-4);
begin
try
ADOCommand1.CommandText := 'use Master';
pgbar.StepIt;
ADOCommand1.Execute;
adocommand1.CommandText := 'execute sp_helpdevice';
pgbar.StepIt;
adocommand1.Execute;
pgbar.stepit;
adocommand1.CommandText := 'backup database ' + database + ' to disk=''' + filename + ''' with init';
pgbar.StepIt;
adocommand1.Execute;
adocommand1.CommandText := 'Use ' + database;
pgbar.StepIt;
adocommand1.Execute;
// Self.Hide;
application.MessageBox(pchar('数据库已经成功备份到 ' + filename + '!'), Gsysname, mb_ok + mb_iconinformation);
//ShowMessage();
StatusBar1.SimpleText := '';
pgbar.Position := 0;
try
dm.ADOConnection1.Connected := True;
except
begin
StatusBar1.SimpleText := '';
application.MessageBox('无法重新接连数据库!', Gsysname, mb_ok + mb_iconerror);
abort;
end;
end;
self.Close;
except
on Exception do
if dm.ADOConnection1.InTransaction then
dm.ADOConnection1.RollbackTrans;
end;
end;
end;
end;
end;
//还原
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('请确保无其他程序正在使用本数据库,否则,还原无法进行!',Gsysname,mb_okcancel+mb_iconinformation)=idcancel then
begin
abort;
end;
StatusBar1.SimpleText := '正在还原中...';
pgbar.Max := 100;
pgbar.Min := 0;
pgbar.Position := 0;
pgbar.Step := 20;
opendialog1.Title:='还原为:';
with OpenDialog1 do
begin
filename := '';
options := [ofhidereadonly, offilemustexist, ofpathmustexist];
if execute then
begin
if dm.ADOConnection1.Connected then
dm.ADOConnection1.Close;
sleep(1000);
pgbar.StepIt;
try
ADOCommand1.CommandText := 'use Master';
ADOCommand1.Execute;
sleep(600);
pgbar.StepIt;
adocommand1.CommandText := 'execute sp_helpdevice';
adocommand1.Execute;
sleep(600);
pgbar.stepit;
adocommand1.CommandText := 'Restore database ' + database + ' From disk=''' + filename + ''' with replace';
sleep(600);
pgbar.StepIt;
try
adocommand1.Execute;
except
begin
raise exception.Create(syserrormessage(getlasterror));
abort;
end;
end;
adocommand1.CommandText := 'Use ' + database;
sleep(600);
pgbar.StepIt;
adocommand1.Execute;
StatusBar1.SimpleText := '';
application.MessageBox(pchar('数据库已经成功还原到数据库 ' + database + '!'), Gsysname, mb_ok + mb_iconinformation);
pgbar.Position := 0;
try
dm.ADOConnection1.Connected := True;
except
begin
StatusBar1.SimpleText := '';
application.MessageBox('无法重新接连数据库!', Gsysname, mb_ok + mb_iconerror);
abort;
end;
end;
self.Close;
except
on Exception do
if dm.ADOConnection1.InTransaction then
dm.ADOConnection1.RollbackTrans;
end;
end;
end;
end;



fhuibo


Access数据库;
var
MyFileName: string;
begin
MyFileName := '';
if SaveDialog1.Execute then
begin
MyFileName := SaveDialog1.FileName;
if MyFileName <> '' then
begin
CopyFile(Pchar(ExtractFilePath(Application.ExeName) + 'shoufa.mdb'), Pchar(MyFileName), false);
end;
end;

var
MyFileName: string;
begin
MyFileName := '';
if OpenDialog1.Execute then
begin
MyFileName := OpenDialog1.FileName;
if MyFileName <> '' then
begin
CopyFile(Pchar(MyFileName),Pchar(ExtractFilePath(Application.ExeName) + 'shoufa.mdb'),false);
end;
end;
end;


godnoloveihavelove


sql server这样写的
背份是BACKUP DATABASE BASENAME TO DISK。。。。
恢复是RESTORE DATABASE BASENAME FROM DISK。。。

这是从磁盘是这样写的,你可以看TSQL帮助


yinzhiw


oracle怎么写啊?


zgq19801123


up


liulangnanhai


代碼怎麼那麼長啊?

我的代碼:

const
filename = './baili.bat';
com1 = ' net stop mssqlserver ';
com2 = ' Net start mssqlserver ';
var
s2: string;
s: Tstringlist;
begin

try
if opend.Execute then //saved是savedialog控件
s2 := opend.FileName

else
exit;
if not fileexists(filename) then
begin
s := Tstringlist.Create();
s.Clear;
s.Add(com1);
s.Add(com2);
s.SaveToFile(filename);
end;
application.ProcessMessages;
winexec(filename, 9);
sleep(20000);
basedm.ADOConnection1.Connected := False;
Basedm.ADOConnection1.Connected := True;
adocommand1.CommandText := 'USE master RESTORE DATABASE Baili FROM DISK=''' + s2 + ''' WITH RECOVERY USE BAILI';
self.pre2;
adocommand1.Execute;
messagedlg('資料還原成功!', mtinformation, [mbok], 0);
except
MessageDlg('還原資料失敗!' + #13 + #10 + '程序將仍用原資料庫運行!', mtError, [mbOK], 0);
end;




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值