高分求教:有谁能帮我解释一下这段代码的具体意义啊!救命!
今天总算顺利通过了测试了,但是中间老师有问代码的具体作用,我又一个文件流和blob流的使用是参照了书上的例子,虽然大致的功能还是知道,但是有些细节部分还不是很清楚,后天答辩怕又问到这方面的问题,所以想请教一下高手,帮帮小妹吧!
请高手将每一句的功能和作用帮忙解释清楚一下,越详细越好,还请帮忙执教一下,文件流和blob流到底是一个什么样的工作方法,在数据库中使用他们来存储文档,是不是将文档内容直接放到数据库中,还是储存的文档的其他信息。万分感谢了!!!
代码如下:
1 procedure TForm4.BitBtn2Click(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
MyFile:=TFileStream.Create('c:\temp.tmp',fmCreate);
with query1 do
begin
Open;
Stream:=TBlobStream.Create(FieldByName('文本') as TBlobField, bmRead);
MemSize := Stream.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
statictext1.caption:='文件名:'+FieldByName('文件名').Asstring;
statictext2.caption:='文件大小:'+FieldByName('文件大小').Asstring+'字节';
finally
MyFile.Free;
Stream.Free;
end;
end;
if FileExists('c:\temp.DOC') then
DeleteFile('c:\temp.DOC');
if FileExists('c:\temp.tmp') then
begin
RenameFile('c:\temp.tmp', 'c:\temp.DOC');
Doc_ole.CreateObjectFromFile('c:\temp.DOC',False);
Doc_ole.Run;
end;
end;
2 procedure TForm4.BitBtn1Click(Sender: TObject);
var
MemSize:Integer;
Buffer:pChar;
MyFile:TFileStream;
Stream:TBlobStream;
filename:string;
begin
table1.insert;
OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC';
if OpenDialog1.Execute then
begin
filename:=OpenDialog1.FileName;
MyFile:=TFileStream.Create(fileName,fmOpenRead);
with table1 do
begin
Open;
edit;
Stream:=TBlobStream.Create(FieldByName('文本')as TBlobField,
bmWrite);
MemSize:=MyFile.Size;
Inc(MemSize);
Buffer:=AllocMem(MemSize);
try
Stream.Seek(0,soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
FieldByName('文件名').AsString:=ExtractFileName(fileName);
FieldByName('文件大小').AsString:=inttostr(MemSize-1);
statictext1.caption:='文件名:'+ExtractFileName(fileName);
statictext2.caption:='文件大小:'+inttostr(Memsize-1)+'字节';
finally
MyFile.Free;
Stream.Free;
end;
try
table1.post;
except
showmessage('保存失败!');
halt;
end;
showmessage('保存成功,正在加载文档!');
Doc_Ole.CreateObjectFromFile(fileName,False);
Doc_Ole.Run;
end;
end;
end;