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