怎么实现图片存入SQL数据库中,且在BCB环境下可以调用呢

nilinm 2006-06-13 09:39:18
图片为JPG或其他格式
...全文
662 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanshu123 2006-06-26
  • 打赏
  • 举报
回复
论坛里好象有不少,
起码我以前问过,
你可以找下
CityHost 2006-06-26
  • 打赏
  • 举报
回复
高度关注中
i_love_pc 2006-06-26
  • 打赏
  • 举报
回复
同样关注
deansroom 2006-06-25
  • 打赏
  • 举报
回复
mark
ccdjk 2006-06-25
  • 打赏
  • 举报
回复
学习学习
flowercity 2006-06-24
  • 打赏
  • 举报
回复
学习
极速小王子 2006-06-22
  • 打赏
  • 举报
回复
学习!
nilinm 2006-06-22
  • 打赏
  • 举报
回复
各位大侠,我试了JPG一种格式的,但如果是存取多种格式的图片,要怎么写能具体点吗,上面的代码有点乱。
wxch 2006-06-15
  • 打赏
  • 举报
回复
正在关注...
极速小王子 2006-06-13
  • 打赏
  • 举报
回复
mark
kwokwinglau 2006-06-13
  • 打赏
  • 举报
回复
呵呵,来电你慢了零秒。
netsys2 2006-06-13
  • 打赏
  • 举报
回复
ZT:

数据类型一定要是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();
}

kwokwinglau 2006-06-13
  • 打赏
  • 举报
回复


代码片段
sqlStr+=":Pic,"
-------------------
:PIC是传递参数。

TMemoryStream *MS = new(TMemoryStream);
AdvPicture1->Picture->SaveToStream(MS);
MS->Seek(0, soFromBeginning);

ADOLook->Close();
ADOLook->SQL->Clear();
ADOLook->SQL->Add(sqlStr);
ADOLook->Parameters->ParamByName("Pic")->LoadFromStream(MS,ftBlob);
ADOLook->ExecSQL();

---------------------------------------
//显示数据库中的图片,读图片(Jpg格式)
TMemoryStream *MemoryStream = new TMemoryStream(); //---一段内存地址
TJPEGImage *JpgImage= new TJPEGImage(); //初始化图像JPEG #include <jpeg.hpp>
try
{
dynamic_cast<TBlobField*>(Table1->FieldByName("image"))->SaveToStream(MemoryStream);
MemoryStream->Position=0;
JpgImage->LoadFromStream(MemoryStream);
image->Picture->Assign(JpgImage);
}
catch(...)
{
delete MemoryStream;
delete JpgImage;
}
delete MemoryStream;
delete JpgImage;
---------------------------------------
读:BMP格式

TBlobField *Field = (TBlobField*)ADOQueryDoc->FieldByName("Content");
Field->SaveToFile( "c:\\my.bmp" );
---------------------------------------
写图片.
TBlobField *Field = (TBlobField*)Table1->FieldByName("image");
if (OpenPictureDialog1->Execute())
{
image->Picture->LoadFromFile(OpenPictureDialog1->FileName);
Field->LoadFromFile(OpenPictureDialog1->FileName );
Table1->Post();
}
---------------------------------------
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
---------------------------------------
2、至于存入数据库,如果指的是SQL,要注意,默认只能65536大小,请在查询分析器中执行下面的语句,使其支持2G(就是image字段能存储的最大大小)
exec sp_configure 'max text repl size',2147483647,
sxzqlzx 2006-06-13
  • 打赏
  • 举报
回复
设置成BLOB格式就行了
stevenjscn 2006-06-13
  • 打赏
  • 举报
回复
MARK

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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