将JPG,BMP,PNG图片插入到ACCESS数据库,Embarcadero RAD Studio XE6编译通过。
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Imaging.pngimage.hpp>
//---------------------------------------------------------------------------
//双击打开图片
void __fastcall TfrmMain::img1DblClick(TObject *Sender)
{
if(dlgOpenPic1->Execute())
{
String cFileName = dlgOpenPic1->FileName ;
try{
TMemoryStream* pMS = new TMemoryStream() ;
TBitmap *pBMP = new TBitmap();
TJPEGImage *pJPG = new TJPEGImage();
TPngImage *pPNG = new TPngImage;
unsigned char *Buffer = new unsigned char[2] ;
int Type;
pMS->Seek(0,soFromBeginning);
pMS->Size = 0 ;
pMS->LoadFromFile(cFileName) ;
pMS->Position = 0 ;
//pMS->Seek(0,soFromBeginning) ;
pMS->ReadBuffer(Buffer,2) ;
Type = ("0x"+IntToHex(Buffer[0],2)+IntToHex(Buffer[1],2)).ToInt() ;
pMS->Position = 0 ;
switch (Type)
{
case 0xFFD8: //JPG文件
pJPG->LoadFromStream(pMS) ;
break ;
case 0x8950: //PNG文件
pPNG->LoadFromStream(pMS) ;
pBMP->Assign(pPNG) ;
pJPG->Assign(pBMP) ;
pJPG->JPEGNeeded() ;
break ;
case 0x424D: //BMP文件
pBMP->LoadFromStream(pMS) ;
pJPG->Assign(pBMP) ;
pJPG->JPEGNeeded() ;
break ;
default:return ;
}
img1->Picture->Assign(pJPG) ;
delete pBMP ;
delete pJPG ;
delete pPNG ;
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//数据插入
void __fastcall TfrmMain::btn11Click(TObject *Sender)
{
TMemoryStream *pMS = new TMemoryStream;
String str ;
qry1->Close() ;
qry1->SQL->Clear() ;
String sql = "insert into 信息 (名称,图片) "
"values (:名称,:图片)" ;
qry1->SQL->Add(sql) ;
qry1->Parameters->ParamByName("名称")->Value = edt1->Text ;
if(img1->Picture->Graphic != NULL)
{
img1->Picture->Graphic->SaveToStream(pMS);
pMS->Position = 0;
qry1->Parameters->ParamByName("图片")->LoadFromStream(pMS,ftBlob) ;
}
qry1->ExecSQL() ;
qry1->Close() ;
delete pMS;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//读取JPG
void __fastcall TfrmMain::btn21Click(TObject *Sender)
{
TMemoryStream *pMS = new TMemoryStream ;
TJPEGImage *pJPG = new TJPEGImage ;
qry1->Close() ;
qry1->SQL->Clear() ;
String sql = "select * from 信息 where 名称='"
+ edt1->Text +"'" ;
qry1->SQL->Add(sql) ;
qry1->Open() ;
TBlobField* pBF = (TBlobField*)qry1->FieldByName("图片") ;
pMS->Seek(0,soFromBeginning);
pMS->Size = 0 ;
pBF->SaveToStream(pMS) ;
pMS->Seek(0,soFromBeginning);
pJPG->LoadFromStream(pMS) ;
img1->Picture->Assign(pJPG) ;
qry1->Close() ;
delete pJPG;
delete pMS;
}
//---------------------------------------------------------------------------