我做了一个进销存软件,我想做一个备份和恢复功能,备份整个数据库。由于我第一次做,没有什么思路,请各位高手帮我指点一下,最好能说得详细一些,谢谢!
解决方案 »
- 请教如何把一个窗体(TForm)完整的(包含标题,图标,边框)作为控件放入一个容器(如TPanel),就如D2007的设计模式窗口一样?
- 在线等 急急急!如何声明全局变量
- 请问在DELPHI中如何调用动态连接库
- 简单sql语句.............
- 特菜问题:句柄是什么来的?
- 求助shellexecute,createprocess如何使用?
- C/S结构,一个ADOContect,多个ADOTable,多用户访问,有问题吗??
- 谁有advlistview 1.5 的源代码?
- 怎样把DBGIRD中的数据像表格一样打印出来呀?
- 谁有CHMmaker2.88(耶书制造)的中文帮助。作者的主页下载不了。
- forgot的散分帖:请教大家一个感情问题——我跟她有可能发展下去吗?
- 如何知道一个汉字对应二进制的编码?UP也有分!在线等待!
数据库备份
if savedialog1.Execute then
filstr:=savedialog1.FileName ;
try
with jyd.command do
begin
close;
sql.clear;
sql.text:=format('backup database jydfc to disk=''%s'' with init',[filstr]);
execsql;
end;
except
on exception do
if jyd.ADOConnection1.InTransaction then
jyd.ADOConnection1.RollbackTrans
end;
end;数据库恢复 if opendialog1.Execute then
filstr:=opendialog1.FileName ;
messagedlg('恢复过程中将会出现短时间的类式死机现象,请耐心等待!!',mtconfirmation,[mbok],0);
jyd.ADOConnection1.Connected:=false;
jyd.ADOCommand1.CommandText:='alter database jydfc set offline with rollback immediate';
jyd.ADOCommand1.Execute ;
jyd.ADOCommand1.CommandText:=format('restore database jydfc from disk=''%s''',[filstr]);
jyd.ADOCommand1.Execute;
jyd.ADOCommand1.CommandText:='alter database jydfc set online with rollback immediate';
jyd.ADOCommand1.Execute ; end;我用的数据库是sql server
用SQL Server 数据库,备份到数据库服务器端:
1、在master库中建立备份和恢复存储过程。CREATE PROCEDURE backupdb
@database varchar(10),
@directory varchar(100)
AS
backup database @database
to disk=@directory2、取得服务器路径。AnsiString __fastcall TFrmDM::GetSqlServerPath(){
AnsiString result,tmp;
TADOQuery *Query=new TADOQuery(this);
Query->Connection=ADOConnection_Master;
Query->Close();
Query->SQL->Clear();
Query->SQL->Add("select filename from sysdatabases where name='master'");
Query->Open();
tmp=Query->FieldByName("filename")->AsString;
result=tmp.SubString(1,tmp.Length()-15);
Query->Free();
return result;
}
try{
path=FrmDM->GetSqlServerPath()+"backup\\";
FrmDM->ADOStoredProc1->Close();
FrmDM->ADOStoredProc1->Connection=FrmDM->ADOConnection_Master;
FrmDM->ADOStoredProc1->Prepared=true;
FrmDM->ADOStoredProc1->ProcedureName="backupdb;1";
FrmDM->ADOStoredProc1->Parameters->ParamByName("@database")->Value = "db_name_to_backup";
FrmDM->ADOStoredProc1->Parameters->ParamByName("@directory")->Value =path+"db_name_to_backup"+d;
FrmDM->ADOStoredProc1->ExecProc();
Application->MessageBox("备份完成","提示",MB_OK+MB_ICONINFORMATION);
this->Close();
}
catch(...){
Application->MessageBox("备份出错,请重新再来","警告",MB_OK+MB_ICONWARNING);
return;
}
备份:
procedure tform1.btnbuckupclick(sender:tobject);
var
QryTmp:Tquery;
begin
qrytmp:=Tquery.create(self);
qryTmp.databasenme:=database1.databasename
QryTmp.sql.text:='Backup database 数据库 to disk='''+
你的路径 +'''';
QryTmp.execsql;
end; 恢复:
procedure tform1.btnrestoreclick(sender:tobject);
var
QryTmp:Tquery;
begin
qrytmp:=Tquery.create(self);
qryTmp.databasenme:=database1.databasename;
database1.connect:=false;//记住,关闭
QryTmp.sql.text:=' use master '+
+' restore database 数据库 to from='''+
你的路径 +'''';
QryTmp.execsql;
database1.connect:=true;//
end;