环境:DELPHI6,C/S结构,使用SQL Server数据库,在客户端有几十个短小的视频文件,不想存入数据库中,想存入服务器的某个文件夹中,数据库表中只存入视频文件的路径和文件名,请教高手如何存入该文件,谢谢。

解决方案 »

  1.   

    回 hthunter(核桃-我的心在下雨,雨中我和她携手漫步) 
       局域网内多人查阅资料用
      

  2.   

    那不就是文件服务器就用konhon说的,在文件服务器上建立共享文件夹,然后直接复制文件就可以了。
      

  3.   

    可以创建一个映射驱动,将文件复制进去,再删除映射驱动!这是我做SQLserver的异地备份的代码。你可以参考!
    //这是拷贝文件到指定目录
    procedure TUserInfor.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;
    //创建映射驱动
    procedure TUserInfor.CreateDriver(DriverID: string);
    var
      NetSource:TNetResource;
      B:dword;
    begin
    try
        with NetSource do
        begin
           dwType:=RESOURCETYPE_ANY;
           lpLocalName:=Pansichar(DriverID);
           lpRemoteName:=Pchar('\\webserver\d$');//服务器的D盘被映射
           lpProvider:='';
        end;  b:=WnetAddConnection2(netSource,Pchar('susuosoft'),Pchar('administrator'),CONNECT_UPDATE_PROFILE);
      if not (b=NO_ERROR) then showmessage(SysErrorMessage(GetLastError));
     except
      // Exit;
       ShowMessage('无法联接网络路径');
     end;
    end;
    //删除映射驱动
    procedure TUserInfor.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;
    //下面是备份源代码
    procedure Tfrm_main.N13Click(Sender: TObject);
    var
      Path:string;
    begin
    try
      path:=ExtractFilePath(application.ExeName)+'DB_back\W'+FormatDateTime('yy-mm-dd',date)+'.bak';
      with DM.cmd do
      begin
         if tag=10 then CommandText:='BACKUP DATABASE official TO disk='''+path+''''
         else
         CommandText:='BACKUP DATABASE official TO disk=''D:\official_001.bak''';
         Execute;
      end;
        if tag<>10 then
        begin
         if not DirectoryExists(ExtractFilePath(application.ExeName)+'DB_back') then
           CreateDir(ExtractFilePath(application.ExeName)+'DB_back');
           userinfo.CreateDriver('Y:');
           userinfo.NetFileCopy(path,'Y:\official_001.bak',self.RzProgressBar1);
           DeleteFile('Y:\official_001.bak');
           userinfo.DeleteDriver('Y:');
        end;
          UserInfo.WriteMsgToEventLogFile('DB0016',1,'数据库完全备份发生成功!',UserInfo.GetLocalHostName);
          MessageDlg('数据库完全备份成功!',mtinformation,[MBOK],0);
     except
         On E:Exception do
         begin
             UserInfo.WriteMsgToEventLogFile('DB0016',0,'数据库完全备份发生错误!,错误代码为'+E.Message,UserInfo.GetLocalHostName);
             if tag<>10 then
             begin
                try
                   DeleteFile('Y:\official_001.bak');
                   userinfo.DeleteDriver('Y:');
                 except
                 end;
             end;
             MessageDlg('数据库完全备份失败!',mtinformation,[MBOK],0);
         end;
     end;
    end;