社区
数据库及相关技术
帖子详情
在线等,散分啦!SQL数据库能不能存JPG格式图片?如何做啊??
xjb258
2003-08-21 05:39:14
在线等,散分啦!SQL数据库能不能存JPG格式图片?如何做啊??
...全文
81
21
打赏
收藏
在线等,散分啦!SQL数据库能不能存JPG格式图片?如何做啊??
在线等,散分啦!SQL数据库能不能存JPG格式图片?如何做啊??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chifengwatch
2004-02-10
打赏
举报
回复
接分。
chifengwatch
2004-02-10
打赏
举报
回复
up
geniusdhc
2004-02-10
打赏
举报
回复
你把图象放到数据库不怕慢啊,存放文件名就行,图象放到本机目录.
weill
2004-02-09
打赏
举报
回复
至于你的JPG文件,先读入Image1控件中吧,和和,这个,应该是非常容易的事儿啦。
呃,留完这贴,就不让说话了,我回家吃饭去罗,回见。
weill
2004-02-09
打赏
举报
回复
补充:
Edit1->Text = ADODataSet1->FieldByName("ID")->Value; 一行可以不要,呵,这是我自个用来查看记录号的。
SQL数据库中我使用的是一个“PIC”的Image字段,请据实际情况改动。
weill
2004-02-09
打赏
举报
回复
最简单,最容易的方法在这儿,呵,刚试出来的:
SQL数据库中设计表的一个字段为Image。
在窗体上加入ADODataSet控件ADODataSet1。
在窗体上加入Image控件Image1。
加入按钮1、2分别用于存、取。
下面给出的代码,把Image1控件中显示出来的图像存入SQL2000服务器数据库中:
ADODataSet1->Active = true;
//ADODataSet1->Append();
ADODataSet1->Edit();
//其实关键也就下面两行。
TBlobField *Field = (TBlobField*)ADODataSet1->FieldByName("PIC");
Field->Assign(Image1->Picture);
ADODataSet1->Post();
ADODataSet1->Active = false;
下面的代码把数据库中的图像读到Image1中:
TStream *Stream1;
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
ADODataSet1->Active = true;
Edit1->Text = ADODataSet1->FieldByName("ID")->Value;
Stream1 = ADODataSet1->CreateBlobStream(ADODataSet1->FieldByName("PIC"),bmRead);
pBitmap->LoadFromStream(Stream1);
Image2->Picture->Assign(pBitmap);
ADODataSet1->Active = false;
附言:
1、如果你喜欢用ADOQuery1那么稍加改造就好了,呵,这是数据库的基本操了,不是这儿的问题了。
2、至于对“图像文件”存入SQL,我想,能把图象读到Image1中,别的就好办多了,不是吗?和和。
3、其它的对数据库的细致操作是你自个的事了。
4、对于非JPG的图像上面是不是可行,和和,我是菜鸟,刚学BCB不久。但我想应该没有问题的,对吧,我没试。
祝你好运:)。
nobill
2004-02-09
打赏
举报
回复
用ImageEn控件,很容易解决!
nobill
2004-02-09
打赏
举报
回复
用ImageEn控件,可以解决多种格式的数据!
binbin
2003-09-13
打赏
举报
回复
ADOQuery1->SQL->Text = "insert into table values('abc', :BlobField)";
ADOQuery1->Parameters->Items[0]->LoadFromFile("文件名", ftBlob);
ADOQuery1->ExecSQL();
IT-司马青衫
2003-09-12
打赏
举报
回复
BCB数据库图像保存技术
1
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
OpenDialog2->FileName="";
if (OpenDialog2->Execute())
{
String f=OpenDialog2->FileName;
if (FileExists(f))
{
String ext=ExtractFileExt(f).LowerCase();
if (ext==".bmp" || ext==".jpg"|| ext==".jpeg")
{
String jpg=ChangeFileExt(ExtractFileName(f),".jpg");
TJPEGImage *j=new TJPEGImage;
if (ext==".bmp")
{
Graphics::TBitmap *b=new Graphics::TBitmap;
b->LoadFromFile(f);
j->Assign(b);
j->CompressionQuality=90;
j->Compress();
delete b;
}
else
{
TFileStream *fs=new TFileStream(f,fmOpenRead);
j->LoadFromStream(fs);
delete fs;
}
DataModule1->ADODataSet1->Edit();
DBEdit2->Text=jpg;
TStream *bs=DataModule1->ADODataSet1->CreateBlobStream(
DataModule1->ADODataSet1->FieldByName("照片图像"),bmReadWrite);
bs->Position=0;
j->SaveToStream(bs);
delete j;
delete bs;
DispJpg();
}
}
}
}
2
记住一定要在post前delete TADOBlobStream对象。
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
如果你在ttable中用了固定字段,就更简单了,以下的ADOTable1pic字段就是
读取access中的blob数据
TMemoryStream *s = new TMemoryStream();
ADOTable1pic->SaveToStream(s);
s->Position=0; //****流首位置必须为零***
TJPEGImage *jp = new TJPEGImage();
jp->LoadFromStream(s);
Image1->Picture->Bitmap->Assign(jp);
delete jp;
delete s;
写数据到access的blob字段
if (OpenDialog1->Execute())
{ADOTable1->DisableControls();
ADOTable1->Append();
ADOTable1pic->LoadFromFile(OpenDialog1->FileName);
ADOTable1name->Value=OpenDialog1->FileName;
ADOTable1->Post();
ADOTable1->EnableControls();
}
3
void __fastcall TForm2::DBImage2Click(TObject *Sender)
{
try
{
if(OpenPictureDialog1->Execute());
{
AnsiString MyFilesExtension = UpperCase(ExtractFileExt(OpenPictureDialog1->FileName));
if(MyFilesExtension==".JPG")
{
TJPEGImage *jpg=new TJPEGImage();
jpg->LoadFromFile(OpenPictureDialog1->FileName);
Clipboard()->Assign(jpg);
DBImage1->DataSource->DataSet->Edit();
DBImage1->PasteFromClipboard();
DBImage1->DataSource->DataSet->Post();
delete jpg;
}
if(MyFilesExtension==".BMP")
{
EditDataSource1->DataSet->Edit();
DataModule1->FindADODataSetDSDesigner7->LoadFromFile(OpenPictureDialog1->FileName);
}
}
}
catch(...)
{
StatusBar1->Panels->Items[1]->Text="保存图像发生异常";
}
}
4
在BCB中采用下术方法存入图片,不过显示代码不用写了,DBImage自动显示.
if(OpenPictureDialog1->Execute());
{
AnsiString MyFilesExtension = UpperCase(ExtractFileExt(OpenPictureDialog1->FileName));
if(MyFilesExtension==".JPG")
{
TJPEGImage *jpg=new TJPEGImage();
jpg->LoadFromFile(OpenPictureDialog1->FileName);
Clipboard()->Assign(jpg);
DBImage1->DataSource->DataSet->Edit();
DBImage1->PasteFromClipboard();
DBImage1->DataSource->DataSet->Post();
delete jpg;
}
zzhong2
2003-08-29
打赏
举报
回复
数据类型一定要是image
存jpeg到SQL数据库:
if(OpenPictureDialog1->Execute())
{
ADOQuery1->Edit();
TBlobField *Field = (TBlobField*)ADOQuery1->FieldByName("photo");
Field->LoadFromFile(OpenPictureDialog1->FileName);
ADOQuery1->Post();
}
//以下是从数据库读jpeg
#include <clipbrd.hpp>
TStream *Stream1;
TJPEGImage *Pjp;
Pjp=new TJPEGImage();
ADOQuery1->Open();
try
{
Stream1=ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("treenodes"), bmRead);//treenodes是存放jpeg内容的字段,它的类型一定要用image
Pjp->LoadFromStream(Stream1);
//Image2是TDBImage组件,它的DateSource,和FieldName属性要空着
Image2->Picture->Bitmap->Assign(Pjp);
delete Stream1;
}
__finally
{
ADOQuery1->Close();
delete Pjp;
}
下面是别人的更好的方法,可存各种图形
以下是讀出各種類型的圖片的程序,支持ADO,BDE或TClientDataSet
#define PICTURE_MAP__(TBit) {TBit *PG = new TBit(); \
try {PG->LoadFromStream(TmpStream);\
Pic->Assign(PG); \
}\
catch(...)\
{delete PG ;\
return false;\
}\
delete PG;\
}
//----------------------------------------------------------------
//該模板將二進制字段中的圖像(GIF或JPG等等)使用Assign方法轉為TPicture,TBitmap等等。
template <class T >
bool LoadPhotoFromField(TField *F_Photo,const AnsiString Format,T *Pic)
{if(!F_Photo->DataSet->Active) return false ;
if(F_Photo->IsNull) return false ;
else
{TStream *TmpStream = F_Photo->DataSet->CreateBlobStream(F_Photo,bmRead);
if(Format == ".JPG" || Format == ".JPEG")PICTURE_MAP__(TJPEGImage )
else if(Format == ".BMP") PICTURE_MAP__(Graphics::TBitmap)
// else if(Format == ".GIF") PICTURE_MAP__(TGIFImage )
else if(Format == ".ICO") PICTURE_MAP__(TIcon)
else if(Format == ".WMF" || Format ==".EMF") PICTURE_MAP__(TMetafile)
else return false ;
}
return true;
}
#undef PICTURE_MAP__(TBit)
//如果要支持GIF,那你要安裝支持GIF的VCL類。
支持多種格式
存入:
if(OpenPictureDialog1->Execute())
{DataSet->Edit();
TBlobField *Field = (TBlobField*)DataSet->FieldByName("photo");
Field->LoadFromFile(OpenPictureDialog1->FileName);
DataSet->FieldByName("photoFormat")->AsString =
ExtractFileExt(OpenPictureDialog1->FileName).UpperCase();
DataSet->Post();
}
jingrunx
2003-08-29
打赏
举报
回复
对,只要是文件,都可以存到数据库,关键是如何显示的问题!
wsljj_2002
2003-08-29
打赏
举报
回复
以前有很多这样的帖子呀。
接分。
hong668
2003-08-29
打赏
举报
回复
只要是文件,什么都可以存入数据库。
ldkkkkk
2003-08-28
打赏
举报
回复
up
xizhouhawk
2003-08-21
打赏
举报
回复
给你代码看看有没有用。
TMemoryStream *stream = new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(stream);
Table1->Insert();
((TGraphicField *)(Table1->FieldByName("image")))->LoadFromStream(stream);
Table1->Post();
delete stream;
上面是bmp代码的保存的代码,显示的话相反用LoadFromStream和SaveToStream.
至于jpeg文件的话,保存没什么区别,至于显示的话将TJPEGBITMAPE转换为TBITMAP就ok了
Sammi52
2003-08-21
打赏
举报
回复
在sql数据表中建立一个image类型字段用来存放图片,在cb中使用DBImage控件直接连接到数据库的存图版字段,打开记录集时使用批更新方式,这样在更改记录后,执行批更新之前,更改结果(在记录集中已经更新)不会更新到数据库。这是一种较为简单的实现方法。
gzllh
2003-08-21
打赏
举报
回复
也可用binary和varbinary类型,binary和varbinary最大长度8000
image类型最大长度2G
gzllh
2003-08-21
打赏
举报
回复
也可用binary和varbinary类型,binary和varbinary最大长度8000
image类型最大长度2G
gzllh
2003-08-21
打赏
举报
回复
建立一个image类型字段
加载更多回复(1)
VS(MFC)保
存
图片
到
SQL
Server
数据库
在MFC中将
图片
以二进制
格式
直接保
存
到
SQL
Server
数据库
中
python将
图片
存
到
Sql
server
数据库
,使用PyQt5展示
数据库
图片
【代码】python将
图片
存
到
Sql
server
数据库
,使用PyQt5展示
数据库
图片
。
使用Python读取
SQL
Server
数据库
的image
格式
数据并导出为png
图片
之前项目是用
数据库
的image
格式
保
存
图片
,但是考虑到
图片
一旦很大的时候,客户端加载
图片
的速度就会变得非常慢,导致登录时间很长。因此必须改为用url的方式,将
图片
的url记录在
数据库
中,指向一个
图片
的虚拟
存
储...
如何将
图片
储
存
在My
SQL
数据库
中
通常对用户上传的
图片
需要保
存
到
数据库
中。 解决方法一般有两种: 1、将
图片
保
存
的路径
存
储到
数据库
; 2、将
图片
以二进制数据流的形式直接写入
数据库
字段中。 以下为具体方法: 一、保
存
图片
的上传路径到...
用python读取pg
数据库
中的blob类型
图片
数据,转换
存
成
jpg
格式
存
到本地文件夹
在工作中,我们常见到
数据库
中的数据类型主要为char,varchar,text等,但是有时我们也会用blob
格式
来
存
储语音文件或者图像文件,在网上找了很多,都没找到合适的办法,只好自己开发一个。
存
入
数据库
中的图像,我们要...
数据库及相关技术
1,178
社区成员
18,939
社区内容
发帖
与我相关
我的任务
数据库及相关技术
C++ Builder 数据库及相关技术
复制链接
扫一扫
分享
社区描述
C++ Builder 数据库及相关技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章