有关自动显示保存在BLOB字段中WORD/EXCEL文件的怪事(100分)

  • 主题发起人 主题发起人 yvping
  • 开始时间 开始时间
Y

yvping

Unregistered / Unconfirmed
GUEST, unregistred user!
我遇到一怪事:在ORACLE7.3下,一个LONG RAW字段,以前用OleContainer保在、显示
都是好好的,现在有变:EXCEL文件可以正确显示,有的WORD文件可以正确显示,有的就
会弹出一个“文件转换“选择提示窗口(如:纯文本、ANSI、Word6.0 for win95/mac等
等,就是没有想要的WORD97选项)这就是说Word97认不出OleContainer流的文件格式!

考虑原因:前几天,发现其中一台电脑感染的一个WORD宏病毒。今天用KILL98的最新版杀了
毒,Office97、WIN98都重新装过,还是弹出“文件转换“窗口。

我真不知道该怎么办!我回家来试都能够正常工作(不过用的是Parodox),那2台电脑
有什么毛病?
 
程序是这样的:
procedure TForm1.BtnSeleFileClick(Sender: TObject);
var
OleStream : TMemoryStream;
begin
//1: select a file
//2: save to the blob field
OleStream := TMemoryStream.Create;
if (OleContainerKbsm.State = osEmpty) or (MessageDlg('是否显示?', mtConfirmation, mbOkCancel, 0) = mrOk) then begin
if OleContainerKbsm.InsertObjectDialog then begin
OleContainerKbsm.doverb(1);
try
OleContainerKbsm.SaveToStream(OleStream);
OleStream.Position := 0; //回零点

DMod.Qry_Kblist.edit;
(dmod.Qry_Kblist.FieldByName('sm') as tblobfield).LoadFromStream(OleStream);
dmod.Qry_Kblist.Post ;
finally
OleStream.Free;
end;
end;
end;
end;

Procedure TForm1.BtnFetchBlobClick(Sender: TObject);
var
MemoryStream: TMemoryStream;
begin
dmod.Qry_KblistSM.SaveToFile('test.doc');
OleContainerKbsm.LoadFromFile('test.doc');
OleContainerKbsm.DoVerb(1); //显示
end;

问题是: 有些(以前不会,现在才有)到OleContainerKbsm.DoVerb(1)显示时就会弹出的
Word97的"文件类型"选择窗口,What's the problem!!!
 
这个问题好象跟文件大小有关,42K以内没有问题(不是很准确),这个delphi怎么是个混蛋,
害人不浅!!!
 
可能是文件被损坏,word 把这个文件当成了旧版的 word 了。损坏可能是由于宏病毒引起的。
 
问题已解决!
把BDE的Blob size改为4096,就没事了!
 
请给yvping , Crab各50分吧.
 
接受答案了.
 
后退
顶部