淘先锋技术网

首页 1 2 3 4 5 6 7

实例应用1://备份procedure TF_DataBaseBackUp.Btn_bfClick(Sender: TObject);

vari:integer;begin

if SaveDialog1.Execute then

beginADOConnection1.Connected:=False;

ADOConnection1.ConnectionString:=StringReplace(GetConnectionString,'Taxi','master',[rfReplaceAll]);

ADOConnection1.Connected:=True;

ADOQuery1.SQL.Text :='backup database Taxi to disk='+QuotedStr(SaveDialog1.FileName);tryBtn_bf.Caption :='正在备份…';

self.repaint;

ADOQuery1.execsql;for i:=1 to 100 do

beginBtn_bf.Caption :='备份中…'+inttostr(i)+'%';

self.repaint;

sleep(50);end;

ShowMessage('数据备份操作已经成功完成!');exceptShowMessage('数据备份时出错!请重试。');end;

Btn_bf.caption:='开始备份';

self.repaint;end;end;//恢复

procedureTF_DataBaseBackUp.Btn_hfClick(Sender: TObject);vari:integer;begin

if Application.MessageBox('该操作会把当前程序数据改为备份时的状态,您确定要这么做吗?','提示',mb_okcancel+MB_ICONQUESTION )<>idok thenexit;if OpenDialog1.Execute then

begin

tryADOConnection1.Connected:=False;

ADOConnection1.ConnectionString:=StringReplace(GetConnectionString,'Taxi','master',[rfReplaceAll]);

ADOConnection1.Connected:=True;

Btn_hf.Caption :='清除数据库连接...';

self.Repaint;

ClearDBConnections();

Btn_hf.Caption :='正在恢复...';

self.repaint;

ADOQuery1.SQL.Text :='restore database Taxi from disk='+QuotedStr(OpenDialog1.FileName);

ADOQuery1.execsql;for i:=1 to 100 do

beginBtn_hf.Caption :='恢复中…'+inttostr(i)+'%';

self.repaint;

sleep(50);end;

Btn_hf.caption:='开始恢复';

self.repaint;exceptApplication.MessageBox('数据恢复时出错!请重试。','提示',64);

Btn_hf.caption:='开始恢复';

self.repaint;

exit;end;

application.MessageBox('数据库已成功恢复!请重新启动系统!','提示:',mb_ok+mb_iconinformation);end;end;//------------------------------------------------------------------------------//函数名称: ClearDBConnections//函数功能: 清除数据库连接//------------------------------------------------------------------------------

procedureTF_DataBaseBackUp.ClearDBConnections;var vspid:string;begin

//覆盖数据库,清除数据库现有连接

ADOQuery1.Close;

ADOQuery1.SQL.Text:='select spid from sysprocesses where dbid=db_id(''Taxi'')';

ADOQuery1.Open;while not ADOQuery1.Eof do

beginvspid:=ADOQuery1.FieldByName('spid').AsString;

ADOQuery2.Close;

ADOQuery2.SQL.Text:='kill'+vspid;

ADOQuery2.ExecSQL;

ADOQuery1.Next;end;end;

实例应用2:procedureTF_BF.BitBtn1Click(Sender: TObject);varinif:Tinifile;

T:string;begininif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'data/SysSet.ini');

T:=inif.ReadString('Data','DbType','');

IF LENGTH(TRIM(EDIT2.Text))=0THEN

BEGIN

APPLICATION.MessageBox('请指定数据备份的文件名!','林康软件',MB_OK+MB_ICONWARNING);

END

ELSE

BEGINif T='SQLserver' then

beginADOQUERY1.Close;

ADOQUERY1.SQL.Clear;

ADOQUERY1.SQL.Add('USE MASTER');

ADOQUERY1.SQL.ADD('BACKUP DATABASE GZGL to disk='+#39+SAVEDIALOG1.FileName+#39+'with init');

TRY

ADOQUERY1.ExecSQL;

APPLICATION.MessageBox('数据备份操作成功!','林康软件',MB_OK+MB_ICONWARNING);

EXCEPT

APPLICATION.MessageBox('数据备份操作失败!','林康软件',MB_OK+MB_ICONWARNING);

END;

close;

TRY

F_main.ADOConnection1.Close;

F_main.ADOConnection1.Open;

EXCEPT

APPLICATION.MessageBox('该系统需要重新启动, 请退出!','林康软件',MB_OK+MB_ICONWARNING);

application.Terminate;

END;end;if T='Access' then

beginF_MAIN.ADOConnection1.Close;

TRY

COPYFILE(PCHAR(ExtractFilePath(Paramstr(0))+'DATA/gzgl.mdb'),PCHAR(EDIT2.Text),FALSE);

APPLICATION.MessageBox('数据备份操作成功!','林康软件',MB_OK+MB_ICONWARNING);

EXCEPT

APPLICATION.MessageBox('数据备份操作失败!','林康软件',MB_OK+MB_ICONWARNING);

END;

F_MAIN.ADOConnection1.Open;end;

END;end;

恢复:procedureTF_HF.BitBtn1Click(Sender: TObject);vart:string;

inif:Tinifile;begininif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'data/SysSet.ini');

T:=inif.ReadString('Data','DbType','');

IF LENGTH(TRIM(EDIT2.Text))=0THEN

BEGIN

APPLICATION.MessageBox('请指定数据恢复的文件名!','林康软件',MB_OK+MB_ICONWARNING);

END

ELSE

BEGINif T='SQLserver' then

begin

if MESSAGEDLG('数据恢复操作将覆盖现有的数据,需要继续吗?',mtconfirmation,[MBYES,MBNO],1) <>Mryes THEN exit;

ADOQUERY1.Close;

ADOQUERY1.SQL.Clear;

ADOQUERY1.SQL.ADD('use master declare @spid int');

ADOQUERY1.SQL.ADD('declare getspid cursor for');

ADOQUERY1.SQL.ADD('select spid from sysprocesses where dbid=db_id('+#39+'GZGL'+#39+')');

ADOQUERY1.SQL.ADD('open getspid');

ADOQUERY1.SQL.ADD('fetch next from getspid into @spid');

ADOQUERY1.SQL.ADD('while @@fetch_status < >-1');

ADOQUERY1.SQL.ADD('begin');

ADOQUERY1.SQL.ADD('exec('+#39+'kill'+#39+'+@spid)');

ADOQUERY1.SQL.ADD('fetch next from getspid into @spid');

ADOQUERY1.SQL.ADD('end');

ADOQUERY1.SQL.ADD('close getspid');

ADOQUERY1.SQL.ADD('deallocate getspid');

ADOQUERY1.SQL.ADD('RESTORE DATABASE GZGL FROM disk='+#39+OPENDIALOG1.FileName+#39+'WITH REPLACE');

TRY

ADOQUERY1.ExecSQL;

APPLICATION.MessageBox('数据恢复操作成功!','林康软件',MB_OK+MB_ICONWARNING);

EXCEPT

APPLICATION.MessageBox('数据恢复操作失败!','林康软件',MB_OK+MB_ICONWARNING);

END;

close;

TRY

F_main.ADOConnection1.Close;

F_main.ADOConnection1.Open;

EXCEPT

APPLICATION.MessageBox('该系统需要重新启动, 请退出!','林康软件',MB_OK+MB_ICONWARNING);

application.Terminate;

END;end;if T='Access' then

beginF_MAIN.ADOConnection1.Close;

TRY

COPYFILE(PCHAR(EDIT2.Text),PCHAR(ExtractFilePath(Paramstr(0))+'DATA/Gzgl.mdb'),FALSE);

APPLICATION.MessageBox('数据恢复操作成功!','林康软件',MB_OK+MB_ICONWARNING);

EXCEPT

APPLICATION.MessageBox('数据恢复操作失败!','林康软件',MB_OK+MB_ICONWARNING);

END;

F_MAIN.ADOConnection1.Open;end;

END;end;

实例应用3:

最简单的sql语句:备份与还原sql server自带的数据库

在服务器上备份:

use northwind

backup database northwindto disk=d:/northwind_bak.dat withinit

restore database northnwind from disk= d:/northwind_bak.dat------------------------------------------------------------------备份数据库这一操作在客户机上实现

客户机:machine

共享目录:share

backup:

bakcup database dbnameto disk=//machine/share/data.bak with init

//machine/share目录要有写权限。

restore:

restore database dbname from disk=//machine/share/data.bak

//

备注:restore 语句有很多的选项,可以查看企业管理器的在线帮助。如下with replace, move dbname_dat to c:/mssql7/data/dbname.mdf,

move dbname_logto c:/mssql7/data/dbname.log

其中c:/mssql7/data/是服务器的目录,这点要注意