请问龙丹等大虾,上个问题的解答在图片比较大的时候出错了!Help(100分)

  • 主题发起人 主题发起人 brokenbridge
  • 开始时间 开始时间
B

brokenbridge

Unregistered / Unconfirmed
GUEST, unregistred user!
上次那个问题,数据库中Blob字段和图片文件显示的问题。
龙丹大虾的解答中,
TBlobField(Table2.FieldByName('照片')).LoadFromFile('C:/TEMP/TEMP.BMP');
TBlobField(Table2.FieldByName('照片')).SaveToFile('C:/TEMP/TEMP.BMP');
OleContainer1.CreateLinkToFile('C:/TEMP/TEMP.BMP',False);

数据小一点时没有出错,当我有一个图片1.3M时,出现Invalid Blob Strength!的错误,
请帮忙解决!

谢谢!


 
是不是数据字段的格式设错了?可是只有这种格式是合适的啊!
 
如果是TQuery,调整TDataBase参数的 BLOB SIZE,或者调整BDE的此参数。(默认32K)
TTable不该有此问题。在我的主页有个可以将BMP图已JPEG格式存入BLOB并显示的控件。
不妨下来试试! http://oopsware.delphibbs.com
 
已经存成文件了,那么和blob size 就没有关系了,问题是错误在那一句?
前两句和blob size有关,后一句就没关系了,最好是直接用画图打开bmp文件
而不用OleContainer1
 
自己做作试试,真的有问题,我就是用的Tabel,而且我必须用OLE
 
本人也曾遇到此类问题,当word文档作为字节流存入库中,大于32k就会错,
不知哪位大侠能指点指点
 
正巧我有段将一个目录中的文件存入数据库的例子!这段程序会将文件保存
到数据库,没有问题啊?

procedure TForm1.RecordFile(Name: string; Attr: Integer);
var
FT, FS: TStream;
begin
ADOQuery3.Insert;
ADOQuery3.FieldByName('ID').AsInteger := FileIndex;
if (Attr and faDirectory)=0
then ADOQuery3.FieldByName('LX').AsInteger := 1
else ADOQuery3.FieldByName('LX').AsInteger := 0;
ADOQuery3.FieldByName('NAME').AsString := Name;
ADOQuery3.FieldByName('ATTR').AsInteger := Attr;

if (Attr and faDirectory)=0 then begin
// 创建 BlobStream
FT:=ADOQuery3.CreateBlobStream(ADOQuery3.FieldByName('CONTEXT'), bmReadWrite);
// 打开文件
FS:=TFileStream.Create(Name, fmOpenRead);
FS.Seek(0, soFromBeginning);
// 复制
FT.CopyFrom(FS, 0);
FT.Free;
FS.Free;
end else ADOQuery3.FieldByName('CONTEXT').Clear;
// 存盘
ADOQuery3.Post;
Inc(FileIndex);
end;
 
我原来也遇到过这样的情况,使用ado可以解决
 
先谢谢,等我试一下。
 
To 不不,OopsWare:
Ado的确能解决问题,谢谢!
我原来用的是
TBlobField(ADOTable1.FieldByName('Bmp')).LoadFromFile('temp.BMP');
但是数据库文件特别大(Acess),是不是文件流的形式可以缩小存储
现在用Stream,可以实现。
但是我怎么读出来,即怎样将数据库中的数据读出来存入文件中,我的copyFrom怎么不行,请指教!

 
多人接受答案了。
 
后退
顶部