关于WORD在数据库中的存取(BLOB问题(100分)

  • 主题发起人 主题发起人 publisher
  • 开始时间 开始时间
P

publisher

Unregistered / Unconfirmed
GUEST, unregistred user!
原程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
MyFile:=Tfilestream.create('c:/1.doc',fmopenread);
with table1 do
begin
Open;
insert;
Stream := TBlobStream.Create(FieldByName('content') 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;
exit; }
end;

Doc_ole.CreateObjectFromFile('c:/1.doc',False);
Doc_ole.Run;{Doc_ole为ToleContainer构件名}
end;
显示project project1.exe raised exception class edbengineerror whith message

invalid blob length.'. process stopped use step or run to continue
继续则可以在容器中显示文件,请问为什么?急急!!!请高手回答

create table table1(name varchar2(10),doc blob); //创建表table1


 
更正
其中 create(fieldbyname('content'....) 中content为 doc是表table1中的字段
 
打开WORD2000文件试一试,我用windows 2000 server/oracle 8.15/word 2000请大家把程序
都试一试,发表一点意见,不要让大富翁太失望,觉得我们都是笨蛋!
 
我没有动态地分配内存,用的是 Stream 的 CopyFrom 方法,没有问题:
BStream := TBlobStream.Create(Table1Doc,bmRead);
FStream := TFileStream.Create('C:/' + Edit1.Text,fmCreate);
FStream.CopyFrom(BStream,BStream.Size);
BStream.Free;
FStream.Free;
OleContainer1.CreateObjectFromFile('C:/' + Edit1.Text,false)
 
可能是READ时没有读进去!

为什么不用CopyFrom?
 
今天仔细看了一下
>>
显示project project1.exe raised exception class edbengineerror whith message

invalid blob length.'. process stopped use step or run to continue
继续则可以在容器中显示文件,请问为什么?急急!!!请高手回答


答: 因为你继续将执行
Doc_ole.CreateObjectFromFile('c:/1.doc',False);
Doc_ole.Run;{Doc_ole为ToleContainer构件名}
当然可以在容器里显示文件!!!
 
多人接受答案了。
 
后退
顶部