[讨论]如何将JPG文件存入数据库,各位老大进来讨论讨论~!

kaimy 2003-11-06 09:46:24
[讨论]如何将JPG文件存入数据库,各位老大进来讨论讨论~!
如题,将JPG文件存入数据库,如何执行?我已将BMP的存入数据库,但是JPG的不行。没有办法,我就先将JPG转换成BMP的,再存入数据库。代码如下:
TJPEGImage * MyJpeg = new TJPEGImage();
Graphics::TBitmap * bmp = new Graphics::TBitmap();
MyJpeg->LoadFromFile(Fielnames);
bmp->Assign(MyJpeg);
TMemoryStream *stream = new TMemoryStream();
bmp->SaveToStream(stream);
Table1->Insert();
((TGraphicField *)(Table1->FieldByName("image")))->LoadFromStream(stream);
Table1->Post();
delete stream;
delete bmp;
delete MyJpeg;
...全文
52 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaimy 2003-11-07
  • 打赏
  • 举报
回复
zzhong2() ,多谢了,你给我的代码通过了,非常感谢!
netsys2 2003-11-06
  • 打赏
  • 举报
回复
这不是存储的问题,是显示的问题。

建议你按文件方式存入数据库,

然后提取出来,存为临时文件,然后按文件的方式加载。
zzhong2 2003-11-06
  • 打赏
  • 举报
回复
数据类型一定要是image
存jpeg到SQL数据库:
if(OpenPictureDialog1->Execute())
{
ADOQuery1->Edit();
TBlobField *Field = (TBlobField*)ADOQuery1->FieldByName("photo");
Field->LoadFromFile(OpenPictureDialog1->FileName);
ADOQuery1->Post();
}

//以下是从数据库读jpeg
#include <clipbrd.hpp>

TStream *Stream1;
TJPEGImage *Pjp;

Pjp=new TJPEGImage();

ADOQuery1->Open();
try
{
Stream1=ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("treenodes"), bmRead);//treenodes是存放jpeg内容的字段,它的类型一定要用image
Pjp->LoadFromStream(Stream1);
//Image2是TDBImage组件,它的DateSource,和FieldName属性要空着
Image2->Picture->Bitmap->Assign(Pjp);
delete Stream1;
}
__finally
{
ADOQuery1->Close();
delete Pjp;
}


下面是别人的更好的方法,可存各种图形
以下是讀出各種類型的圖片的程序,支持ADO,BDE或TClientDataSet
#define PICTURE_MAP__(TBit) {TBit *PG = new TBit(); \
try {PG->LoadFromStream(TmpStream);\
Pic->Assign(PG); \
}\
catch(...)\
{delete PG ;\
return false;\
}\
delete PG;\
}
//----------------------------------------------------------------
//該模板將二進制字段中的圖像(GIF或JPG等等)使用Assign方法轉為TPicture,TBitmap等等。
template <class T >
bool LoadPhotoFromField(TField *F_Photo,const AnsiString Format,T *Pic)
{if(!F_Photo->DataSet->Active) return false ;
if(F_Photo->IsNull) return false ;
else
{TStream *TmpStream = F_Photo->DataSet->CreateBlobStream(F_Photo,bmRead);
if(Format == ".JPG" || Format == ".JPEG")PICTURE_MAP__(TJPEGImage )
else if(Format == ".BMP") PICTURE_MAP__(Graphics::TBitmap)
// else if(Format == ".GIF") PICTURE_MAP__(TGIFImage )
else if(Format == ".ICO") PICTURE_MAP__(TIcon)
else if(Format == ".WMF" || Format ==".EMF") PICTURE_MAP__(TMetafile)
else return false ;
}
return true;
}
#undef PICTURE_MAP__(TBit)
//如果要支持GIF,那你要安裝支持GIF的VCL類。



支持多種格式
存入:
if(OpenPictureDialog1->Execute())
{DataSet->Edit();
TBlobField *Field = (TBlobField*)DataSet->FieldByName("photo");
Field->LoadFromFile(OpenPictureDialog1->FileName);
DataSet->FieldByName("photoFormat")->AsString =
ExtractFileExt(OpenPictureDialog1->FileName).UpperCase();
DataSet->Post();
}
potlee 2003-11-06
  • 打赏
  • 举报
回复
希望kaimy (我爱芳芳) 能顺利解决,因为我也想知道
klbt 2003-11-06
  • 打赏
  • 举报
回复
学习,帮你顶。
kaimy 2003-11-06
  • 打赏
  • 举报
回复
to : netsys2(来电) 老兄,你是不是说我的存储方法对?而是我的显示方法错了?

可我试了你说的方法,生成的文件长度为0。
有没有代码啊?兄弟我先谢谢了!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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