TClientDataSet在将jpg图片存到SQL2000数据库中的问题?如果不是TClientDataSet而是TADOQuery类型则没有问题?

fangerhua 2010-01-29 02:06:04
function TFm_TrainingAbout.ImageWrite(TrainID,FileName: string; tmpQuery: TClientDataSet): Boolean;
const
JPEG_FLAG_BEGIN = $D8FF;
JPEG_FLAG_END = $D9FF;
var
JpegStream:TMemoryStream;
Jpeg:TJpegimage;
Imageproperty:TFileStream;
Flag1,Flag2:word;
begin
try
Result := false;
JpegStream:=Tmemorystream.Create;
jpeg:=TJpegimage.create;

Imageproperty:=TFileStream.Create(FileName,fmOpenRead);
Imageproperty.Read(Flag1,SizeOf(Flag1));
Imageproperty.Position:=Imageproperty.Size-2;
Imageproperty.Read(Flag2,sizeOf(Flag2));
if not (flag1=JPEG_FLAG_BEGIN) and (flag2=JPEG_FLAG_END) then
begin
showmessage('您上传的图片格式不是*.JPEG格式!请先转换!');
JpegStream.Free;
Imageproperty.Free;
exit;
end;

Imageproperty.Free;
jpeg.LoadFromFile(FileName);

JpegStream.Position:=0;
Jpeg.SaveToStream(JpegStream);
if JpegStream.Size = 0 then
begin
showmessage('0');
Exit;
end;

try
with tmpQuery do
begin
Close;
CommandText := 'update Training set photo=:Jimage where TrainID = '+QuotedStr(trim(TrainID));
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);
Execute
end;
JpegStream.Free;
Jpeg.Free;
except end;
Result := true ;
Except end;
end;
这段代码执行没有问题,但图片存到数据库后就不能读出,报“jpeg Error #53”错误,显然是数据格式错了?

TClientDataSet存image就不能吗?
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangerhua 2010-03-03
  • 打赏
  • 举报
回复
其实是无满意的结贴:(。Delphi的bug
huangheguyun 2010-01-30
  • 打赏
  • 举报
回复
JpegStream.Position:=0;
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);


一楼正解
金卯刀 2010-01-29
  • 打赏
  • 举报
回复
先确定,图片是否保存进去了?没有保存进去的话,用上面的试一下
金卯刀 2010-01-29
  • 打赏
  • 举报
回复
确定那样不行? try this

try
with tmpQuery do
begin
Close;
CommandText := 'update Training set photo=:Jimage where TrainID = '+QuotedStr(trim(TrainID));
Parameters.ParamByName('Jimage').Assign(Jpeg);
Execute
end;

fangerhua 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 avan_lau 的回复:]
引用 1 楼 acrodelphi 的回复:
JpegStream.Position:=0;
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);


正解
[/Quote]


=================
试过吗?还是有过类似经验的?
JpegStream.Position:=0;
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);

我的程序里也是这样啊?
金卯刀 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acrodelphi 的回复:]
JpegStream.Position:=0;
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);

[/Quote]
正解
火星牛 2010-01-29
  • 打赏
  • 举报
回复
JpegStream.Position:=0;
tmpQuery.Params.ParamByName('Jimage').LoadFromStream(JpegStream,ftBlob);

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧