本文最后更新于2019年01月19日;如遇问题,请留言及时通知站长。

C++ Builder6 + SQL Server操作JPEG文件

by zhangjun

在BCB 6 sp4里调试通过,欢迎大虾批评指正。 

//OpenDialog1打开JPEG图像,Edit1保存图像地址,Image1显示图像

//其他格式的图像文件没有试验,可以试试。

C++
OpenDialog1->FileName="";
if (OpenDialog1->Execute())
 {
    Edit1->Text=  OpenDialog1->FileName;
    Image1->Picture->LoadFromFile(Edit1->Text);
 }

// 下面:把图像保存到SQL Server数据库中

C++
if (!Edit1->Text.IsEmpty())
{
   ADOQuery1->Close();    //自行添加ADOConnention,并配置
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("Select * from imgs");
  ADOQuery1->Open();
  ADOQuery1->Insert();
  ADOQuery1->FieldByName("imgaddress")->AsString=Edit1->Text;
  ADOQuery1->FieldByName("imgID")->AsInteger=Edit2->Text.toInt();         //保存图像的编号
  TBlobField *field=dynamic_cast<TBlobField *>(ADOQuery1->FieldByName("img")); //img 是image类型的数据
  field->LoadFromFile(Edit1->Text);  //这里是关键,要直接从文件调。不要调Image1,这样很容易出“Jepg error #41”错误
  ADOQuery1->Post();
 ADOQuery1->Close();
}

//从数据库里读取图像

C++
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select * from imgs ");
AnsiString ddd="where imgID=" +Edit1->Text;
ADOQuery1->SQL->Add(ddd);
ADOQuery1->Open();
if(ADOQuery1->RecordCount==1)
{   
 TStream *Stream1;
  TJPEGImage   *Pjp=new TJPEGImage(); 
  try
  {
    Stream1=ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("img"), bmRead);
    Pjp->LoadFromStream(Stream1);
    Image2->Picture->Assign(Pjp);
    delete Stream1;
  }
  __finally
  {     
   delete Pjp;
  }  
}