如果要做到像phpmyadmin那样把数据库结构和内容导出来备份的话,该怎样做,谢谢

解决方案 »

  1.   

    回shitianj(仲) :
    要控件,google搜了一个DAC for mysql的控件,里面有个tools控件说是可以backup数据库的,老兄做过吗。。或者有其它控件可以推荐一下吗,谢谢回 zdq801104(我很笨,但是我不傻!) :
    谢谢你顶贴,不过你这样的回答只会浪费论坛资源
      

  2.   

    你上次是不是帖子往着一扔就不见人了??
    让我等了好久都没回音~~~
    你如果用命令的话,可以用SELECT INTO OUTFILE
    今天没有时间试了,我感觉就是这个了,
    因为MYSQL是文件式的数据库文件,你也可以通过拷贝文件来进行数据库的备份
    你可以到网上找一个MYSQL的中文手册那里边有怎样进行MYSQL的数据库备份,还有上边的那个命令可以用你取数据的控件来执行
    只能帮这些了~~
      

  3.   

    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;