delphi 加入 jpeg 格式的图片入数据库(50分)

  • 主题发起人 ivanzeng
  • 开始时间
I

ivanzeng

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
var
tempStream:TMemoryStream;
JpgPic:TJpegImage;

S:String;
begin
try
if openpicturedialog1.Execute then
begin
JpgPic:=TJpegImage.Create;
tempStream:=TMemoryStream.Create;
tempStream.Clear;
adoquery3.Edit;
JpgPic.LoadFromFile(openpicturedialog1.FileName);
Image2.Picture.bitmap.assign(JpgPic);
JpgPic.SaveToStream(tempStream);
TBlobField(adoquery3.FieldByName('S_pic')).LoadFromStream(tempStream) ;
adoquery3.Post; //加入post 时会出错
end;
finally
JpgPic.Free;
tempStream.Free;
end;
end;

---------------------------
我在加入时图片会正常显示在image中,但我一关掉系统图片就没了,好像存不进去,加入post时又会出错

各位大虾帮我看看!
 
具体提示错误是什么贴出来看看
“但我一关掉系统图片就没了,好像存不进去” 你是不是用的bde?
如果是把那个blob size 改大点我改成10240
 
//用普通Image控件,在数据集滚动时加载数据库图片数据
procedure Tfrmzpgc.ado0AfterScroll(DataSet: TDataSet);
var
Jpg: TJPEGImage;
Buf: TMemoryStream;
begin
Try
if (ado0.RecordCount > 0) and not (ado0.FieldByName('MSQ099').IsNull) then
begin
Jpg := TJPEGImage.Create;
Buf := TMemoryStream.Create;
TBlobField(ado0.FieldByName('MSQ099')).SaveToStream(Buf);
Buf.Position := 0;
Image1.Visible := false;
if BUF.Size = 0 then
else
begin
Jpg.LoadFromStream(Buf);
Image1.Picture.Assign(jpg);
Image1.Visible := true;
end;
Buf.Free;
Jpg.Free;
end
else
Image1.Picture := nil;
Except;
End;
end;

//打开图片
if not (ado0.State in [dsEdit,dsInsert]) then exit;
OpenImg.Execute;
if OpenImg.FileName <> '' then //选择图片
begin
image1.Picture.LoadFromFile(OpenImg.FileName);
TBlobField(ado0.FieldByName('MSQ099')).LoadFromFile(OpenImg.FileName);
end;

//保存
ado0.post;
 
JpgPic.SaveToStream(tempStream);
你这个Tempstream不应该用JpgPic来写,而是要用Image2.Picture.bitmap.SaveToStream(TempStream);
这事情我刚做过,不过我是直接用TBitmap来做.
 
jpg.SaveToStream(TBlobField(adoquery3.FieldByName('S_pic')))
查查数据库那边关于这方面的,一大堆
 
顶部