怎样在数据库中存储图象(100分)

  • 主题发起人 主题发起人 hai2002
  • 开始时间 开始时间
H

hai2002

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用TMemoryStream向表中存储图象时,出现'invalid blob length' 请指教
 
用blob试试吧
 
我是这样作的
MS:=TMemoryStream.create;
MYImage.Picture.Bitmap.SaveToStream(MS);
MS.Position:=0;
Table1.Append;

TBlobField(Table1.FieldbyName('image')).LoadFromStream(MS);

但是出现invalid blob length 错误
 
stream:=tmemorystream.Create;
//j:=tjpegimage.Create;
//j.LoadFromFile('e:/a.jpg');
stream.Position:=0;
stream.Size:=sizeof(j);
//j.SaveToStream(stream);
MYImage.Picture.Bitmap.SaveToStream(stream);
if table1.Active then table1.Close;
table1.Open;
if table1.Locate(fieldname,fieldvalue',[loCaseInsensitive]) then
begin
try
table1.Edit;
tBlobfield(table1.FieldByName('fcontent')).LoadFromStream(stream);
table1.Post;
except on e:exception do
showmessage(e.Message);
end;
end;
stream.Free;
 
我同意[晴]的做法。
 
你用的什么数据库啊?
 
字段类型是什么?
 
我用的时sql server2000 在表中建立的属性时 image 长度 16 用晴的我刚刚测试,出现同样的错误
是不是我在数据库建立表的 时候有问题?
 
字段属性时image
 
长度太小了吧??
 
字段属性是image 长度不能更改
 
多谢帮助,但还没解决
 
将BMP放入DBASE和Paradox的BLOB字段中

(1)使用裁剪板
procedure TForm1.Button1Click(Sender: TObject);
var
C: TClipboard;
begin
C := TClipboard.Create;
try
if Clipboard.HasFormat(CF_BITMAP) then
DBImage1.PasteFromClipboard
else
ShowMessage('Clipboard does not contain a bitmap!');
finally
C.Free;
end;
end;

(2)从文件调入
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1Bitmap.LoadFromFile(
'c:/delphi/images/splash/16color/construc.bmp');
end;

(3)从其他控件的BITMAP类中读入
procedure TForm1.Button3Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.LoadFromFile(
'c:/delphi/images/splash/16color/athena.bmp');
DBImage1.Picture.Assign(B);
finally
B.Free;
end;
end;


显示BLOB字段的BMP图

(1)直接显示当前记录
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(Table1Bitmap);
//Table1Bitmap为在Table中添加的字段
end;

(2)直接显示
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(
TBLOBField(Table1.Fields[1]));
end;
//Image1.Picture.Bitmap.Assign(Table1.Fields[1]);也行

(3)不直接显示
procedure TForm1.Button2Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.Assign(Table1Bitmap);
Image1.Picture.Bitmap.Assign(B);
finally
B.Free;
end;
end;

 
将你的语句贴出来,看看
 
你用什么连接数据库,BDE?ODBC?可能是Blob Size设置的太小了
 
后退
顶部