如何将JPG文件存入ACCESS数据库中,谢谢.

NewestIdea 2006-05-17 07:58:31
请问:如何将JPG文件存入ACCESS数据库中,而后从数据库中取出并在图片框中显示出来.
...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanshangming 2006-05-17
  • 打赏
  • 举报
回复
楼主,jjwwang(风归叶) 的答案已经包括到里面了,你分析一下就行了。
1、读JPG文件可以用文件流的方法
TFileStream * JpgFile = new TFileStream("d:\\test.jpg",fmOpenRead);
2、写入数据库可以在表中创建Image或Binary等类型的字段,如创建一下picField的Image字段。
在程序操作时可以用TBlobStream进行操作
ADOQuery1->Edit();
TBlobStream *Stream1 = ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("picField"),bmReadWrite);
写入数据库时如下
Stream1->CopyFrom(JpgFile, JpgFile->Size);
delete Stream1;
ADOQuery->Post();

3、从数据库中读出JPG文件如下
#include <Jpeg.hpp>

TStream *Stream1 = ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("picField"),fmOpenRead);
TJpegImage * jpeg = new TJpegImage;
jpeg->LoadFromStream(Stream1);
Image1->Picture->Bitmap->Assign(jpeg);
delete jpeg;
delete Stream1;


CACACACACA 2006-05-17
  • 打赏
  • 举报
回复
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<TBlobField *>(ADOQuery1->FieldByName("img")); //img 是image类型的数据
field->LoadFromFile(Edit1->Text); //这里是关键,要直接从文件调。不要调Image1,这样很容易出“Jepg error #41”错误

ADOQuery1->Post();
ADOQuery1->Close();
}

//从数据库里读取图像

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;
}
}
搜来的.
NewestIdea 2006-05-17
  • 打赏
  • 举报
回复
楼上的老大,能不能给一个具体点的例子,谢谢啦.
CACACACACA 2006-05-17
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)

{
TBlobStream *Stream1;
TStream *Stream2;

Stream1 = new TBlobStream(Table1Notes, bmRead);
try
{
ClientDataSet1->Edit();
// here抯 another way to create a blob stream
Stream2 = ClientDataSet1->CreateBlobStream(ClientDataSet1->FieldByName("picField"),
bmReadWrite);
try
{
Stream2->CopyFrom(Stream1, Stream1->Size);
ClientDataSet1->Post();
}
__finally
{

delete Stream2;
}
}
__finally
{
delete Stream1;
}
}

1,178

社区成员

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

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