在MYSQL的表中我将PIC字段设成longblog类型,当表为空时TADOQuery控件显示PIC字段为TblobField类型,当PIC字段中存在图片数据时,再看PIC字段就变成了TvarBytesField类型了,然后执行程序就显示数据类型不匹配。
我用的TBlobStream来存的图片。请各位大侠指点。
我用的TBlobStream来存的图片。请各位大侠指点。
解决方案 »
- 求解一SQL语句
- Embarcadero Shines Light on Delphi Prism™ .NET development system for Windows, Mac OS X and Linux
- DELPHI2009中如何实现在系统任务栏隐藏窗口标题?
- 谁知道query.sql.add('sysdate减去20040201101150');后是什么类型的,是日期型吗?
- 新买了一台名片扫描机,USB接口的,装好驱动,想自己用程序控制怎么办?
- 有谁知道CreateMessageDialog函数的具体用法?和其特点?
- 异构数据库互导数据
- 这两种写法有什么不同?up有分!
- delphi的edit敲回车是属于哪个事件的? 我的分用光了,拜托!
- 猫的来电显示
- DELPH程序界面,能否做成像讯雷一样的,而且可以随便调整上下左右的宽度。
- adoconnection.execute 执行不了?
TADOQuery.Edit;
TblobField(TADOQuery.FieldByName('FieldName')).LoadFromFile('文件名');
TADOQuery.Post;
读取
TblobField(TADOQuery.FieldByName('FieldName')).SaveToFile('文件名');
希望对你有所帮助!
TADOQuery.Edit; TblobField(TADOQuery.FieldByName('FieldName')).LoadFromFile('文件名');
或者
filestream := tfilestream.create(filename,fmopenread);
TblobField(TADOQuery.FieldByName('FieldName')).LoadFromStream(filestream);
TADOQuery.Post; 读取
TblobField(TADOQuery.FieldByName('FieldName')).SaveToFile('文件名');
或者
memorystream := tmemorystream.create;
TblobField(TADOQuery.FieldByName('FieldName')).SaveToStream(memorystream);
jpg := tjpegimage.create;
jpg.loadfromstream(memorystream);
我保存的是JPG图片,现在已经可以写入数据库了,可是在读取时用SaveToFile()是却是输出的0字节的文件。
if (eJGRYF.Qry1.FieldByName('GONGWY_PHOTO_FILE').IsNull) then
begin
eJGRYF.Img1.Picture := nil;
exit;
end;
TBlobField(eJGRYF.Qry1.FieldByName('gongwy_photo_file')).SaveToFile('C:\TEST.JPG'); //运行这句时提示“Invalid Class Typecast”
eJGRYF.img1.Picture.LoadFromFile('C:\TEST.JPG');
procedure ShowPhoto;
var
jpg : TJpegImage;
ImgFile : string;
srm:TStringStream;
begin
ImgFile := ExtractFilePath(Application.ExeName)+'\Photo\'
+ eJGRYF.Qry1.FieldByName('gongwy_id').AsString +'.jpg';
try
srm:=TStringStream.create('');
with eJGRYF.Qry1 do
begin
Close;
SQL.Clear;
SQL.Text:='Select * From gongwy_photo Where ( GONGWY_ID = '''
+ DM.GWYQ.FieldByName('GONGWY_ID').AsString + ''')' ;
Open;
First;
TBlobField(FieldByName('GONGWY_PHOTO_FILE')).SaveToStream(srm);//这里还是显示“Invalid Class Typecast”的错误
srm.position:=0;
eJGRYF.img1.picture.graphic.loadfromstream(srm);
end;
finally
srm.free;
eJGRYF.img1.picture.SaveToFile(ImgFile);
end;
是不是我写入图片的程序不对呢?但确实写进去了,用MYSQL管理工具都能正常显示
试一下这样var
jpg : TJpegImage;
ImgFile : string;
srm:TStringStream;
blob:TStream;
begin
ImgFile := ExtractFilePath(Application.ExeName)+'\Photo\'
+ eJGRYF.Qry1.FieldByName('gongwy_id').AsString +'.jpg';
try
srm:=TStringStream.create('');
with eJGRYF.Qry1 do
begin
Close;
SQL.Clear;
SQL.Text:='Select * From gongwy_photo Where ( GONGWY_ID = '''
+ DM.GWYQ.FieldByName('GONGWY_ID').AsString + ''')' ;
Open;
First;
blob:=eJGRYF.Qry1.CreateBlobStream(FieldByName('GONGWY_PHOTO_FILE'),bmRead);
blob.Seek(0,soFromBeginning);
Showmessage(inttostr(blob.Size));
//TBlobField(FieldByName('GONGWY_PHOTO_FILE')).SaveToStream(srm);//这里还是显示“Invalid Class Typecast”的错误
//srm.position:=0;
//eJGRYF.img1.picture.graphic.loadfromstream(srm);
end;
finally
srm.free;
eJGRYF.img1.picture.SaveToFile(ImgFile);
end;
end;