三层mts数据库中如何传送图象?((50分)

  • 主题发起人 主题发起人 dark_eagle
  • 开始时间 开始时间
D

dark_eagle

Unregistered / Unconfirmed
GUEST, unregistred user!
有数据表如下:
字段:gh(工号),zp(职工照片)(image类型)
使用存储过程CREATE PROCEDURE zjzp --增加照片
@gonghao varchar(7),
@zhaopian image
AS
declare @result tinyint,@message varchar(100)
if len(isnull(@gonghao,''))=0
begin

select @result=0,@message='信息不完整!'
end
else

begin

insert into zgzp (gh,zp) values (@gonghao,@zhaopian)
if @@error=0 and @@rowcount>0
select @result=1,@message='增加成功'
end
select result=@result,message=@message

中间层:
建立一个method(方法)zjzp(增加照片),有两个参数:_gh,_zp.类型为VARIANT
用adostoredproc调用存储过程.
adozjzp.Edit;
adozjzp.Parameters[1].Value:=_gh;
adozjzp.Parameters[2].Value:=_zp;
adozjzp.Prepared;
adozjzp.ExecProc;
adozjzp.Post;


客户端:
定义一个tbitmap变量picture1.

picture1:=tbitmap.create;
picture1.assgn(image1.picture);
datamodule1.socketconnection1.appserver.zjzp(combobox1.text,picture);


提示最后一句出错,与ole有关, 请各位多指教.
 
你要在客户端把picture转换成avariant型。在服务器在转换回来!
procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap);
var
Stream : TMemoryStream;
begin

try
Stream := TMemoryStream.Create;

VariantToStream (aValue,Stream);
aBmp.LoadfromStream(Stream);

finally
VariantClear(aValue);
Stream.free;
end;

end;

procedure TForm2.BMPToVariant(aBmp : TBitmap;
var aVariant:OleVariant);
var
Stream : TMemoryStream;
begin

try
Stream := TMemoryStream.Create;

Image1.Picture.Bitmap.SaveToStream(Stream);

StreamToVariant(Stream, aVariant);
finally
Stream.Free;
end;

end;

 
接受答案了.
 
那就用TMemoryStream.LoadFromFile吧
 
后退
顶部