把你的E-MAIL地址
发到 [email protected]
我发个程序给你

解决方案 »

  1.   

    老问题:这样就可以了:
    BlockWrite(f,Buffer^,SizeOf(Buffer),BytesRead);
      

  2.   

    主要是那个缓冲区必须是一个指针~~,指向需要写入的内容,那个SizeOf也要修改一下。
      

  3.   

    我实在不知道问题出现在什么地方,现在这段程序只能写进几个字符而已。我的源代码是这样的:
    function TForm1.DownLoadFileFromDB(SerialNo,FileName: String): Boolean;
    var
      FileHandle:Integer;
      fs:TBlobStream;
      buffer:PChar;
      MemSize:Integer;
      f:File;
      BytesRead:Integer;
    begin
      With cQuery1 do
      begin
        Close;
        Sql.Clear ;
        Sql.Add ('select serial_no,notice_message');
        Sql.Add ('from prt_notice_message');
        Sql.Add ('where serial_no=:SerialNo');
        ParamByName('SerialNo').AsString:=SerialNo;
        OPen;
      end;
      fs:=TBlobStream.Create (TMemoField(cQuery1.FieldByName('notice_message')),bmRead);
      fs.Position :=0;
      try
        MemSize := fs.Size;
        Inc(MemSize); {Make room for the buffer's null terminator.}
        Buffer := AllocMem(MemSize);     
        try
          fs.Read(Buffer^, MemSize);       if FileExists(FileName) then
          if MessageBox(Handle,'该文件已经存在,是否覆盖原文件?','',MB_ICONINFORMATION+MB_OKCANCEL)=IDCANCEL then
          begin
            Result:=false;
            exit;
          end;
          AssignFile(f,FileName);
          try
            Rewrite(f,1);
            BlockWrite(f,Buffer^,SizeOf(Buffer),BytesRead);
          finally
            CloseFile(f);
          end;
        finally
          FreeMem(Buffer, MemSize);
        end;
      finally
        fs.Free;
      end;end;