请大家看看这个小问题^_^(急用,高分)!(200分)

  • 主题发起人 主题发起人 vagrant
  • 开始时间 开始时间
V

vagrant

Unregistered / Unconfirmed
GUEST, unregistred user!
我要把一张图片存入SQL 中,字段类型为IMAGE型。
测试程序如下:
var
bmp:Tbitmap;
begin
bmp:=Tbitmap.create;
bmp.assign(image1.picture.bitmap);
table1.fieldbyname('Name').value:=dbedit1.text;
table1.fieldbyname('Sex').value:=dbedit2.text;
table1.fieldbyname('Age').value:=dbedit3.text;
(table1.fieldbyname('photo') as Tblobfield).Assign(bmp);
table1.post;
bmp.free;
可是提示: 'Invalid BLOB length',如何解决呢?
我用流的方式试过也没有试成,哪位做过,如何做的,最好有源代码!
同样的以上这段程序在PARADOX表中可以实现,不知为什么在SQL中不行。
 
没人做过, 还是太简单了,急盼人给指点一下呀!
 
[:(!]
代码:
兄台你参考一下例程试试:
向SQLServer插入记录相信大家都会做,但是如果表中带有Image字段就不好弄了,这里有一个例子,非常安全,同时也向大家展示动态生成控件的技巧(对高手来说班门弄斧了)
procedureButton1Click(Sender:Tobject);
var
Query:Tquery;
StringStream:TStringStream;
begin
StringStream:=TStringStream.Create(’’);
Memo.Lines.SaveToStream(StringStream);//在这里创建一个字符流
StringStream.Position:=0;
Query:=Tquery.Create(self);//在这里创建一个临时的Query
Query.DatabaseName:=Database.DatabaseName;
withQuery.SQLdo
begin
Clear;
Append(’INSERTINTOTEST’);
Append(’(ID,CONTENT)’);//CONTENT是一个Image字段
Append(’VALUES(:ID,:CONTENT)’);
end;
withQuerydo
begin
ParamByName(’ID’).asInteger:=StrToIntDef(edtID.Text,0);
ParamByName(’CONTENT’).asBlob:=StringStream.DataString;//就在这里赋值
end;
StringStream.Free;//用完了马上Free掉
Database.StartTransaction;//开始事务控制
try
Query.ExecSQL;//开始插入记录
Database.Commit;//提交事务
except
Query.Free;//如果出错首先将QueryFree掉
Database.RollBack;//回退事务
raise;//重新引发异常,以通知用户
end;
Query.free;
end;
 
 
是不是要设置一下bde的blobsize 增大一下
 
你的 photo 是什么类型?
 
很有道理阿!
 
我的PHOTO是SQL中的IMAGE类型。
JWSON888的方法一会儿我试一下,看看。先看看修改BDE后能不能实现。
 
function SavePic: Boolean;
var
CurStream: TMemoryStream;
begin
Result := False;
if not PicFlag then
Exit;
CurStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(CurStream);
if not ADOQ_Pic.Active then
ADOQ_Pic.Open;
ADOQ_Pic.Append;
CurStream.Position := 0;
TBlobField(ADOQ_Pic.FieldByName('pic')).LoadFromStream(CurStream);
try
ADOQ_Pic.Post;
Result := True;
except
Result := False;
end;
finally
CurStream.Free;
end;
end;
 
最好能用ADO,
 
后退
顶部