我的Oracle的blob字段只能存取bmp和txt文件,不能存取doc或zip文件?(100分)

  • 主题发起人 xuxincheng
  • 开始时间
X

xuxincheng

Unregistered / Unconfirmed
GUEST, unregistred user!
主要代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
str:string;
begin
if opendialog1.Execute then
begin
str:=extractfilename(opendialog1.filename);
delete(str,pos('.',str),4);
with table1 do begin
open;
insert;
Fields[0].AsString:=str;
fields[1].asstring:=datetimetostr(date);
MyFile:=Tfilestream.create(opendialog1.FileName,fmopenread);
Stream := TBlobStream.Create(FieldByName('graphic') as TBlobField, bmWrite);
MemSize := MyFile.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Seek(0, soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
post;
showmessage('导入成功!');
end;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
astream:tblobstream;
fstream:tmemorystream;
begin
if savedialog1.Execute then
begin
fstream:=tmemorystream.Create;
astream:=tblobstream.Create(table1.fieldbyname('graphic') as tblobfield,bmread);
try
fstream.SetSize(astream.Size+1);
fstream.LoadFromStream(astream);
fstream.SaveToFile(savedialog1.FileName)
finally
astream.Free;
fstream.Free;
end;
showmessage('输出成功!');
end;
end;

 
只要是文件什么都可以放进去
 
bmp和txt文件导入,再输出后文件正常,doc或zip文件经过这样一个过程后就不正常了。
帮帮我。
 
试一下在确定文件名之后,直接使用tblobfield.loadfromfile过程,不通过memostream
进行周转。
blob字段是二进制的,只要写入和输出是相匹配的,不会导致文件异常。
除非在你输出时有病毒在作怪。
 
MemSize := MyFile.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Seek(0, soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
这段代码为什么不用
Stream.copyfrom(myfile)来代替呢?
 
用内存流可以解决这个问题
 
to 北斗:
Tblobstream的copyfrom方法由Tstream继承而来,而它的声明是:
CopyFrom(Source: TStream; Count: Int64): Int64;
//Copies a specified number of bytes from one stream to another
不可以通过文件名调用的。
 
没有结果,结束了吧。
 
顶部