将Word文档存入数据表中的一些问题(100分)

  • 主题发起人 主题发起人 新手101010
  • 开始时间 开始时间

新手101010

Unregistered / Unconfirmed
GUEST, unregistred user!
数据表
字段名  类型
Name   Alpha
Size Alpha
Doc Ole
程序如下:
procedure TForm1.Button1Click(Sender: TObject);//读取表中的Word文档
var
MemSize:Integer;
Buffer:Pchar;
MyFile:TFileStream;
Stream:TBlobStream;
begin
MyFile:=TFileStream.Create('c:/temp.tmp',fmCreate);
with Table1 do
begin
Open;
Stream:=TBlobStream.Create(fieldbyname('Doc') as TBlobField,bmRead);
MemSize:=Stream.Size;
Inc(MemSize);//增加的一个字节给结尾的NULL
Buffer:=AllocMem(MemSize);//分配内存
try
Stream.Read(Buffer^,MemSize);//读取Table1中当前行的Doc数据域,存入到Blob流中
MyFile.Write(Buffer^,MemSize);
StaticText1.Caption:='文件名:'+FieldByName('Name').AsString;
StaticText2.Caption:='文件大小:'+FieldByname('Size').AsString;
finally
Stream.Free;
MyFile.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:/tmep.doc');
OleContainer1.CreateObjectFromFile('c:/temp.doc',False);
OleContainer1.Run;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);//保存Word文档到表中
var
MyFile:TFileStream;
Stream:TBlobStream;
Memsize:integer;
Buffer:Pchar;
filename:string;
begin
if (Opendialog1.Execute and (Opendialog1.FileName<>'')) then
begin
filename:=Opendialog1.FileName;
MyFile:=TFileStream.Create(filename,fmOpenRead);
with Table1 do
begin
Open;
edit;
stream:=TBlobStream.Create(fieldbyname('Doc') as TBlobField,bmWrite);//Doc为BLOB字段名
MemSize:=Stream.Size;
showmessage(inttostr(stream.Size));
Inc(MemSize);
Buffer:=AllocMem(MemSize);
try
Stream.Seek(0,soFromBeginning);//流指针放到最前端
MyFile.Read(Buffer^,MemSize);//将Word文档内容讲稿Buffer中
Stream.Write(Buffer^,MemSize);//将Buffer中的内容写入Blob流中
fieldbyname('name').AsString:=Extractfilename(filename);
fieldbyname('Size').AsString:=inttostr(MemSize-1);
StaticText1.Caption:='文件名:'+ExtractFilename(filename);
StaticText2.Caption:='文件大小:'+inttostr(MemSize-1);
finally
Stream.Free;
MyFile.Free;
end;
try
Post;
except
Showmessage('保存失败');
halt;
end;
showmessage('保存成功');
OleContainer1.CreateObjectFromFile(filename,false);
OleContainer1.Run;
end;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);//清空OLE
begin
Olecontainer1.CleanupInstance;
Olecontainer1.Refresh;
Statictext1.Caption:='文件名:';
StaticText2.Caption:='文件大小:';
end;
问题1:在读取表中的Word文档时,出现错误,内容为“找不到%1”
问题2:在表中的Size字段中的内容为0,我试过,Stream.。Size也为0
问题3:由于Word文档的大小不定,如果文件比较大,在OleContainer1中显示的内容不全可见,我试过Sizemode属性的各个值,但都不如意,我想在它上加入滚动条一定很好,如何加入
问题4:在OleContainer1中有内容时,点击右键后会出现个菜单,点击“编辑”或“打开”后出现类似Word的界面,如何返回到我们在程序设计时的那个界面
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部