想在SQL 2000里存取JPG图象,代码如下,通过主程序调用dll窗体,并在TImage显示出来,但到调用图象出来的时候总是提示地址出错。( Ado连接无问题,其它字段在同一窗体中可以正常显示)procedure Tdataform.IDPictClick(Sender: TObject); // 存图象
var Spict: TSaveDialog;
pjpg:tjpegimage;
pic:TMemoryStream;
begin
Spict:=TSaveDialog.Create(Application);
Spict.InitialDir:='我的文档';
Spict.Filter:='JPG图像文件(*.JPG)|*.JPG';
if Not Spict.Execute then exit;
pjpg:=tjpegimage.Create;
pjpg.LoadFromFile(Spict.FileName);
Image1.Picture.Assign(Pjpg);
pic:=TMemoryStream.Create;
pjpg.SaveToStream(pic);
pic.Position:=0;
TBlobField(CustomerQry.FieldByName('UserIDImg')).LoadFromStream(pic);
Image1.Picture.CleanupInstance;
Spict.Free;
Pjpg.Free;
pic.Free;
end;
procedure Tviewdataform.FormShow(Sender: TObject); //读图象
var tempjpeg:tjpegimage;
TempStream:TMemoryStream;
begin
image1.Picture.Graphic :=nil;
try
tempstream := TMemoryStream.Create;
tempjpeg:=tjpegimage.Create;
TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromStream(tempstream); //执行到这里出错
tempstream.Position:=0;
tempjpeg.loadfromstream(tempstream);
Image1.Picture.Assign(TempJpeg);
finally
tempstream.free;
tempjpeg.free;
end;
end;
var Spict: TSaveDialog;
pjpg:tjpegimage;
pic:TMemoryStream;
begin
Spict:=TSaveDialog.Create(Application);
Spict.InitialDir:='我的文档';
Spict.Filter:='JPG图像文件(*.JPG)|*.JPG';
if Not Spict.Execute then exit;
pjpg:=tjpegimage.Create;
pjpg.LoadFromFile(Spict.FileName);
Image1.Picture.Assign(Pjpg);
pic:=TMemoryStream.Create;
pjpg.SaveToStream(pic);
pic.Position:=0;
TBlobField(CustomerQry.FieldByName('UserIDImg')).LoadFromStream(pic);
Image1.Picture.CleanupInstance;
Spict.Free;
Pjpg.Free;
pic.Free;
end;
procedure Tviewdataform.FormShow(Sender: TObject); //读图象
var tempjpeg:tjpegimage;
TempStream:TMemoryStream;
begin
image1.Picture.Graphic :=nil;
try
tempstream := TMemoryStream.Create;
tempjpeg:=tjpegimage.Create;
TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromStream(tempstream); //执行到这里出错
tempstream.Position:=0;
tempjpeg.loadfromstream(tempstream);
Image1.Picture.Assign(TempJpeg);
finally
tempstream.free;
tempjpeg.free;
end;
end;
Field: TField;
strm: TStream;
begin
Field := Column.Field;
if Field is TBlobField then
begin
if (Field is TGraphicField) or (Field is TMemoField) then Exit
end
else
Exit;
strm := Field.DataSet.CreateBlobStream(Field, bmRead);
try
JPEGImage.LoadFromStream(strm);
FileName := Field.DataSet.FieldByName('FileName').AsString;
finally
strm.Free;
end;
end;(注:给你一个例子供参考)
BS:TADOBlobStream;BS:=TADOBlobStream.Create(CustomerQry.FieldByName('UserIDImg') as TBlobField, bmRead);
BS.LoadFromStream(pic);
TBlobField(querydataform.UDataQry.FieldByName ('UserIDImg')).LoadFromfile(filename); //就可以呀。
你在DLL中独立设一个数据集试试。