sql客户端为什么不能备份数据?而在服务器端是可以备份数据的.下面语句是在能够连接sql server 2000的客户机上不能备份数据.
  try
  if Edit1.Text='' then
    showmessage('请选择备份数库的路径')
  else
    begin
    with ADOQuery1 do
    begin
      close;
      SQL.Clear;
      SQL.Add('backup database xhjdgl to disk='+''''+Trim(Edit1.Text)+'''');
      EXECSQL;
    end;
    while true do
    begin
      ProgressBar1.Position := ProgressBar1.Position+1;
      if ProgressBar1.Position=100 then
        break;
    end;
    showmessage('备份成功');
  end;
  except
    showmessage('数据库备份失败');
  end;

解决方案 »

  1.   

    下面语句在服务器端提示"备份成功",并在c:\中有abc.bak这个文件.
    而在客户端运行时,也提示"备份成功",可在c:\中却没有abc.bak这个文件.  try
        ADOQuery1.close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('backup database xhjdgl to disk='+'''c:\abc''');
        ADOQuery1.EXECSQL;
        showmessage('备份成功');
      except
        showmessage('数据库备份失败');
      end;
      

  2.   

    而在客户端运行时,也提示"备份成功",可在c:\中却没有abc.bak这个文件.
    从客户端备份数据时,为什么不在客户端电脑上的c:\形成abc.bak的文件,而是将这个文件保存到服务器端的c:\abc.bak上了,不知道怎么回事?
      

  3.   

    sql只能备份到服务器上,你在客户端设置的文件路径被sql理解为服务器上的文件路径了。你去服务器上看是不是有那个abc.bak呀
      

  4.   

    这是SQL为了保护数据库而设定的 
    我也碰倒过 提供如下解决方法:
    这是备份过程:
    var
      Path:string;
    begin
      try
        path:=ExtractFilepath(application.EXEName);
        if not DirectoryExists(path+'back\') then
        CreateDir(path+'back\');
        with DM.cmd do
        begin
           if tag=10 then CommandText:='BACKUP DATABASE official TO disk='''+path+'back\W'+FormatDateTime('yy-mm-dd',date)+'.bak'''
           else
           CommandText:='BACKUP DATABASE official TO disk=''D:\official_001.bak''';
           Execute;
        end;
        if tag<>10 then
        begin       opt_obj.NetFileCopy(path+'\back\W'+FormatDateTime('yy-mm-dd',date),'\\webserver/D$\official_001.bak',PB);
           DeleteFile('Y:\official_001.bak');
           opt_obj.DeleteDriver('Y:');
        end;    MessageDlg('数据库备份成功!',mtInformation,[MBOK],0);
      except
         MessageDlg('数据库备份失败!',mterror,[MBOK],0);
      end;
    end;
    上述中出现的一些方法过程还有函数如下解释:CreateDriver 是建立一个客户端关于服务器保存数据库备份文件路径的驱动映射 代码如下:
    procedure CreateDriver(DriverID: string);
    var
      NetSource:TNetResource;
      B:dword;
    begin
    try
        with NetSource do
        begin
           dwType:=RESOURCETYPE_ANY;
           lpLocalName:=Pansichar(DriverID);
           lpRemoteName:=Pchar('\\webserver\d$');
           lpProvider:='';
        end;  b:=WnetAddConnection2(netSource,Pchar(''),Pchar('administrator'),CONNECT_UPDATE_PROFILE);
      if not (b=NO_ERROR) then showmessage(SysErrorMessage(GetLastError));
     except
      // Exit;
       ShowMessage('无法联接网络路径');
     end;
    end;//NetFileCopy是关于从服务器上将备份文件拷贝下来 我这里使用了进度条
    procedure NetFileCopy(SourceFile,MoveToFile:string;P:TRzProgressBar);
    var
      FromF, ToF: file;
      NumRead, NumWritten: Integer;
      Buf: array[1..2048] of Char;
    begin
        AssignFile(FromF, MoveToFile);
        Reset(FromF, 1); { Record size = 1 }    AssignFile(ToF,SourceFile); { Open output file }
        Rewrite(ToF, 1); { Record size = 1 }    P.PartsComplete:=0;
        P.TotalParts:=sizeof(FromF);
        repeat
            BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
            BlockWrite(ToF, Buf, NumRead, NumWritten);
            P.IncPartsByOne;
        until (NumRead = 0) or (NumWritten <> NumRead);
        CloseFile(FromF);
        CloseFile(ToF);
        P.PartsComplete:=0;
    end;DeleteDriver 这是删除建立的映射驱动器
    procedure DeleteDriver(DriverID: string);
    var 
      dwFlags: DWORD; 
      errCode: DWORD;
    begin
      dwFlags := CONNECT_UPDATE_PROFILE;
      errCode := WNetCancelConnection2(PChar(DriverID), dwFlags, true);
      if (errCode <> NO_ERROR)  then
      Application.MessageBox(PChar(SysErrorMessage(GetLastError)), '', MB_OK);
    end;
      

  5.   

    很抱歉 由于是局域网 我没有创建驱动映射 直接找到服务器地址拷贝文件的, 
    我修改了一下备份过程
    这是备份过程:
    var
      Path:string;
    begin
      try
        path:=ExtractFilepath(application.EXEName);
        if not DirectoryExists(path+'back\') then
        CreateDir(path+'back\');
        CreateDriver('Y:'); 
        with DM.cmd do
        begin
           if tag=10 then CommandText:='BACKUP DATABASE official TO disk='''+path+'back\W'+FormatDateTime('yy-mm-dd',date)+'.bak'''
           else
           CommandText:='BACKUP DATABASE official TO disk=''D:\official_001.bak''';
           Execute;
        end;
        if tag<>10 then
        begin       opt_obj.NetFileCopy(path+'\back\W'+FormatDateTime('yy-mm-dd',date),'Y:\official_001.bak',PB);
           DeleteFile('Y:\official_001.bak');
           opt_obj.DeleteDriver('Y:');
        end;    MessageDlg('数据库备份成功!',mtInformation,[MBOK],0);
      except
         MessageDlg('数据库备份失败!',mterror,[MBOK],0);
      end;
    end;