文件分部门归类,部门的文件又分一般文件和记录表格小类,文件有文件名称和文件内容组成,全部文件都是WORD文档,
                                    
要求:1、用户可以随时为某个部门添加、删除、修改该部门的文件。当添加一个新的文件名称是,系统应该可以调用WORD给用户编辑然后保存。用户可以根据文件名称查询,然后可以点击该文件名称连接到该文件名称对应的WORD文档,进行修改保存2、可以按照部门为查询条件,列出该部门所有的文件,可以按照部门+文件分类查询列出要查询的文件分类列表,也可以按照部门+文件分类+文件名称模糊查询,可以按照部门+文件名称模糊查询,用户可以点击某文件浏览该文件的内容(浏览该文件的WORD文档)。

解决方案 »

  1.   

    微软不公开Doc文件的格式,我们有啥办法?
      

  2.   

    五、从数据库读取文件到本地硬盘和从本地硬盘读取文件到数据库在数据库上使用Image二进制字段保存,使用Stream流的方式。创建文件流:
         Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
         Word_FileStream.Position:=0;保存到数据库的Image字段:
         TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);从数据库读取文件到本地硬盘:
         TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);释放文件流:
         Word_FileStream.Free;
    -------------------------------------------------------------------------------
    我也尝试用流的方法解决,但我不能多次进行文件的写入,而且我想在该表新建一个主码,但这样就插入不成功。我的代码如下
    OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC';{从对话窗选择文件}   if OpenDialog1.Execute then   begin     MyFile:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead); //找出要写入数据库的WORD文件    with table1 do   {‘table1’为含BLOB字段的表名}     begin       Open;       Edit;       Stream := TBlobStream.Create(FieldByName('Doc') as TBlobField, bmWrite );{‘Doc’为BLOB字段名}       MemSize := MyFile.Size;       Inc(MemSize); {Make room for the  buffer's null terminator.}       Buffer := AllocMem(MemSize);       {Allocate the memory.}       try         Stream.Seek(0, soFromBeginning);  {Seek 0 bytes from the stream's end point}         MyFile.Read(Buffer^,MemSize); //将数据从流读出        Stream.Write(Buffer^,MemSize);       finally         MyFile.Free;         Stream.Free;       end;            try             Post;            except             on E: EDatabaseError do          if HandelException(E)< >0 then                         exit         else         raise;            end;      end;