BCB 6 sp4 + SQL Server 2k 存取JPEG图像,绝对好用!

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

//OpenDialog1打开JPEG图像,Edit1保存图像地址,Image1显示图像
// 其他格式的图像文件没有试验,可以试试 。

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

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

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

 1<tblobfield *="">(ADOQuery1-&gt;FieldByName("img")); //img 是image类型的数据   
 2field-&gt;LoadFromFile(Edit1-&gt;Text); //  这里是关键  ,要直接从文件调。不要调Image1,这样很容易出“Jepg error #41”错误 
 3
 4ADOQuery1-&gt;Post();   
 5ADOQuery1-&gt;Close();   
 6} 
 7
 8//从数据库里读取图像 
 9
10ADOQuery1-&gt;Close();   
11ADOQuery1-&gt;SQL-&gt;Clear();   
12ADOQuery1-&gt;SQL-&gt;Add("Select * from imgs ");   
13AnsiString ddd="where imgID=" +Edit1-&gt;Text;   
14ADOQuery1-&gt;SQL-&gt;Add(ddd);   
15ADOQuery1-&gt;Open();   
16if(ADOQuery1-&gt;RecordCount==1)   
17{   
18TStream *Stream1;   
19TJPEGImage *Pjp=new TJPEGImage();   
20try   
21{   
22Stream1=ADOQuery1-&gt;CreateBlobStream(ADOQuery1-&gt;FieldByName("img"), bmRead);   
23Pjp-&gt;LoadFromStream(Stream1);   
24Image2-&gt;Picture-&gt;Assign(Pjp);   
25delete Stream1;   
26}   
27__finally   
28{   
29delete Pjp;   
30}   
31}   
32
33
34PS:第一次发文章,不知道格式怎么样。 ^_^</tblobfield>
Published At
Categories with 数据库类
comments powered by Disqus