调试环境:win7,C++ builder XE 10.2调试通过。 双击和单击都可以取出图片字段的记录,有二种不同取法。
//---------------------------------------------------------------------------
//直接存储SQLite中图片Blob字段二种方法
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form1->FDConnection1->DriverName="SQLite";
Form1->FDConnection1->Params->DriverID="SQLite";
String Dstr=ExtractFilePath(ParamStr(0))+"testdata.db";
Form1->FDConnection1->Params->Database=Dstr;
Form1->FDConnection1->Connected=true;
//ShowMessage(Dstr);
//统计数目
Form1->FDQuery1->Open("select * from itdata");
TMemoryStream *mem=new TMemoryStream;
if(Label1->Caption.Length() && ListBox1->ItemIndex>=0)
{
mem->LoadFromFile(Label1->Caption);
Form1->FDQuery1->RecNo=ListBox1->ItemIndex;
Form1->FDQuery1->Edit() ;
//存储
TBlobField *blob_pic=(TBlobField *)Form1->FDQuery1->Fields->FieldByName("image");
try
{
//blob_pic->LoadFromFile(Label1->Caption);
blob_pic->LoadFromStream(mem);
}
catch(...)
{
ShowMessage("图像存盘失败!");
}
Form1->FDQuery1->Post();
}
delete mem;
//另一种(存的方法)
//TMemoryStream* pMS = new TMemoryStream;
//pMS-> LoadFromFile(Edit2-> Text);
//ADOQuery1-> Parameters-> ParamByName( "title ")-> Value = Edit1-> Text;
//ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS, ftBlob);
//ADOQuery1-> ExecSQL();
}
//---------------------------------------------------------------------------
//直接读取SQLite中图片Blob字段二种方法
//还有一种更好的方法,不需要导出图片再载入的方式,直接利用TMemoryStream载入到TImage中显示。可以从下载源码文件获得,谢谢!
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender) //单击显示图片,还有一种是双击可以直接显示图片
{
Form1->FDConnection1->DriverName="SQLite";
Form1->FDConnection1->Params->DriverID="SQLite";
String Dstr=ExtractFilePath(ParamStr(0))+"testdata.db";
Form1->FDConnection1->Params->Database=Dstr;
Form1->FDConnection1->Connected=true;
//ShowMessage(Dstr);
//统计数目
Form1->FDQuery1->Open("select * from itdata");
//读取
Form1->FDQuery1->RecNo=ListBox1->ItemIndex;
TBlobField *blob_pic=(TBlobField *)Form1->FDQuery1->Fields->FieldByName("image");
try
{
blob_pic->SaveToFile(ExtractFilePath(ParamStr(0))+"//temp//temp1.bmp");
Image1->Picture->LoadFromFile(ExtractFilePath(ParamStr(0))+"//temp//temp1.bmp");
}
catch(...)
{
ShowMessage("图像读取失败!");
}
// delete blob_pic;
//另一种(取blob)
//ADOQuery2-> Parameters-> ParamByName( "id ")-> Value = Edit3-> Text.ToInt();
//ADOQuery2-> Open();
//
//TMemoryStream* pMS = new TMemoryStream;
//TBlobField* pField = (TBlobField*) ADOQuery2-> FieldByName( "image ");
//pField-> SaveToStream(pMS);
//pMS-> SaveToFile( "aa.jpg ");
//ADOQuery2-> Close();
}