var
b:TBlobStream;
begin
B:=TBlobStream.Create(query1.FieldByName('image') as TBlobField,bmread);
showmessage(inttostr(b.Size));
end;
我刚作了个小实验,上面的没有问题,不过我用的是sql库。
b:TBlobStream;
begin
B:=TBlobStream.Create(query1.FieldByName('image') as TBlobField,bmread);
showmessage(inttostr(b.Size));
end;
我刚作了个小实验,上面的没有问题,不过我用的是sql库。
改用TClientBlobStream就可以了
改用TClientBlobStream就可以了
改为
Buffer:=AllocMem(MemSize+1);
在试试
procedure TForm1.Button3Click(Sender: TObject);
Var MemSize:Integer;
Buffer:PChar;
BlobStream1:TClientBlobStream;
OleStream:TStream;
begin
if not BDEClientDataset1.FieldByName('全文').IsNull then
begin
try
//OleContainer1.InsertObjectDialog;
BlobStream1:=TClientBlobStream.Create(BDEClientDataset1.FieldByName('全文') as TBlobField,bmRead);
MemSize:=BlobStream1.Size;
Inc(MemSize);
try
Buffer:=AllocMem(MemSize);
//GetMem(Buffer,MemSize);
except
MessageDlg('内存不足,不能执行此操作!',mtWarning,[mbOk],0);
exit;
end; BlobStream1.Seek(0,soFromBeginning);
BlobStream1.Read(Buffer^,MemSize); //OleStream:=TStream.Create;
OleStream.Write(Buffer^,MemSize); OleContainer1.LoadFromStream(OleStream);
OleContainer1.Run;
OleContainer1.DoVerb(ovPrimary);
finally
BlobStream1.Free;
OleStream.Free;
FreeMem(Buffer,MemSize);
end;
end
else
ShowMessage('对象为空,不能执行此操作!');
end;