CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

请问delphi怎么实现数据备份和还原,TShFileOpStruct是什么类?

楼主lizhongzhi(凡星)2004-09-01 11:49:01 在 Delphi / 数据库相关 提问

请问delphi怎么实现数据备份和还原,TShFileOpStruct是什么类? 问题点数:20、回复次数:2Top

1 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2004-09-01 12:00:25 得分 10

CopyFile的API复制方法备份  
  TShFileOpStruct不是类,是记录,在ShellAPI中定义的  
  ShFileOperation用的参数之一Top

2 楼changlin365(changlin365)回复于 2004-09-11 14:26:09 得分 10

var  
          FADOCommand:   TADOCommand;  
          FOpenQuery:   TADOQuery;  
          FConnection:   TADOConnection;  
  初始化  
      FConnection   :=   TADOConnection.Create(nil);  
      FConnection.LoginPrompt   :=   False;  
      FConnection.CommandTimeout   :=   3600;  
      FConnection.ConnectionTimeout   :=   60;  
   
      FADOCommand   :=   TADOCommand.Create(nil);  
      FADOCommand.CommandTimeout   :=   3600;  
      FADOCommand.CommandType   :=   cmdText;  
      FADOCommand.Connection   :=   FConnection;  
   
      FOpenQuery   :=   TADOQuery.Create(nil);  
      FOpenQuery.Connection   :=   FConnection;  
  备份  
  const  
      BackupStr   =   'use   master   backup   database   [%s]   to   DISK=''%s''     with   init';  
  begin  
      Result   :=   GetConnected;  
      if   not   Result   then   Exit;  
      with   FADOCommand   do  
      begin  
          try  
              FADOCommand.CommandText   :=   Format(BackupStr,   [DBName(数据库名称),   FileName(备份文件名称)]);  
              FADOCommand.Execute;  
              Result   :=   True;  
          except  
              on   E:   Exception   do  
              begin  
                  FLastError   :=   '数据库备份错误:'   +   E.Message;  
                  Result   :=   False;  
              end;  
          end;  
      end;  
   
  恢复  
  var  
      LogicDBName,   LogicLogName:   string;//,   FSQL  
  const  
      RestoreStr   =   'Use   master   RESTORE   database   [%0:s]     FROM   DISK   =   ''%1:s''   '  
          +   '   with   Replace,   Move   ''%2:s''   to   ''%3:s%0:s_data.mdf'',move   ''%4:s''   to   '  
          +   '   ''%3:s%0:s_log.ldf''';  
  begin  
      //判断连接数  
      Result   :=   CheckOtherConnected   and   GetLogicInfo(LogicDBName,   LogicLogName);  
      if   not   Result   then  
      begin  
          Result   :=   False;  
          Exit;  
      end;  
      with   FADOCommand   do  
      begin  
              FADOCommand.CommandText   :=   Format(RestoreStr,   [DBName,   FFileName,  
                  LogicDBName,   GetDBDataFilePath,   LogicLogName]);  
          try  
              FADOCommand.Execute;  
              Result   :=   True;  
          except  
              on   E:   Exception   do  
              begin  
                  FLastError   :=   '数据恢复错误:'   +   E.Message;  
                  Result   :=   False;  
              end;  
          end;  
      end;  
  附:  
  function   GetLogicInfo(var   LogicDBName,  
      LogicLogName:   string):   Boolean;  
  begin  
      with   FOpenQuery   do  
      begin  
          try  
              Close;  
              SQL.Clear;  
              SQL.Add(Format('use   master   RESTORE   FILELISTONLY   FROM   DISK   =''%s''',   [FFileName]));  
              Open;  
              First;  
              while   not   Eof   do  
              begin  
                  if   FieldByName('Type').AsString   =   'D'   then  
                      LogicDBName   :=   FieldByName('LogicalName').AsString;  
                  if   FieldByName('Type').AsString   =   'L'   then  
                      LogicLogName   :=   FieldByName('LogicalName').AsString;  
                  Next;  
              end;  
              Result   :=   True;  
          except  
              on   E:   EOleException   do  
              begin  
                  FLastError   :=   Format('数据恢复错误:找不到备份文件"%s"。'  
                      +     #10#13'请确认文件是否存在。',   [FFileName]);  
                  Result   :=   False;  
              end;  
          end;  
      end;  
  end;  
   
  function   GetDBDataFilePath:   string;  
  begin  
      with   FOpenQuery   do  
      begin  
          try  
              Close;  
              SQL.Clear;  
              SQL.Text   :=   'select   filename   from   master..sysdatabases   where   name   =   '''   +   FConnectInfo.DB   +   '''';  
              Open;  
              Result   :=   Fields[0].AsString;  
              if   Result   <>   EmptyStr   then  
              begin  
                  if   Length(ExtractFileDir(Result))   <>   3   then  
                      Result   :=   ExtractFileDir(Result)   +   '\'  
                  else  
                      Result   :=   ExtractFileDir(Result)  
              end  
          except  
              on   E:   Exception   do  
                  FLastError   :=   '得到系统路径错误:'   +   E.Message;  
          end;  
      end;  
  end;  
   
   
  Top

相关问题

  • 备份还原
  • 10分求SQL数据库备份和还原Delphi代码?
  • 如何在DELPHI中实现数据库备份和还原!
  • delphi中如何用sql语句来备份和还原数据库?
  • 备份/还原的问题
  • 还原备份出错
  • sql备份还原问题?
  • sql server的备份还原
  • SQL还原备份问题
  • 备份还原的问题?

关键词

  • fadocommand
  • fconnection
  • tshfileopstruct
  • 备份
  • fopenquery
  • extractfiledir
  • nil
  • result
  • begin
  • exception

得分解答快速导航

  • 帖主:lizhongzhi
  • ly_liuyang
  • changlin365

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo