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就不能吗?
...全文
123 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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);
unit uMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, RzEdit, RzButton, ExtCtrls, IniFiles, RzTabs, ComCtrls, RzListVw, RzShellCtrls, ImgList, RzShellDialogs, RzCmboBx, QRCtrls, QuickRpt, jpeg, ShlObj, RzPanel, RzSplit, RzTreeVw, DB, ADODB, Provider, DBClient, GridsEh, DBGridEh, RzStatus; type PShellItem = ^TShellItem; TShellItem = record FullID, ID: PItemIDList; Empty: Boolean; DisplayName, TypeName: string; ImageIndex, Size, Attributes: Integer; ModDate: string; end; TfrmMain = class(TForm) RzPageControl1: TRzPageControl; TabSheet1: TRzTabSheet; TabSheet2: TRzTabSheet; lbl1: TLabel; edt_Path1: TRzEdit; btn_o2: TButton; Button1: TButton; SplPreview: TRzSplitter; img1: TImage; RzToolbar1: TRzToolbar; RzSpacer1: TRzSpacer; ClientDS_PicCap: TClientDataSet; DataSP_PicCap: TDataSetProvider; Qry_PicCap: TADOQuery; Ds_PicCap: TDataSource; DBGridEh1: TDBGridEh; ClientDataSetH: TClientDataSet; DataSetProviderH: TDataSetProvider; QueryH: TADOQuery; DataSourceH: TDataSource; RzBtn_0: TRzBitBtn; RzBtn_1: TRzBitBtn; ImageList1: TImageList; Memo1: TMemo; ClientDS_PicCapacc_id_only: TStringField; ClientDS_PicCapname: TStringField; ClientDS_PicCapplate_num: TStringField; ClientDS_PicCapplate_type: TStringField; ClientDS_PicCapInsDate: TDateTimeField; ClientDS_PicCapAcc_ID_Only_1: TStringField; ClientDS_PicCapfDateTime: TDateTimeField; ClientDS_PicCapPicturePath1: TStringField; ClientDS_PicCapPicturePath2: TStringField; ClientDS_PicCapPicturePath3: TStringField; ClientDS_PicCapPicturePath4: TStringField; ClientDS_PicCapPicturePath5: TStringField; ClientDS_PicCapPicturePath6: TStringField; ClientDS_PicCapPicturePath7: TStringField; ClientDS_PicCapPrintCount: TIntegerField; ClientDataSetHAutoID: TAu

5,928

社区成员

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

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