社区
数据库及相关技术
帖子详情
<急求解决>数据曾库的问题!!!
zhusijin
2003-10-20 11:40:32
请教大家关于数据库存取方面的问题,谢谢!!!
数据库使用ACCESS,存取方式为ADO。
怎样设置数据库中的字段使其能够存取图片,及用C++BUILDER存取字段的方法。
...全文
45
6
打赏
收藏
<急求解决>数据曾库的问题!!!
请教大家关于数据库存取方面的问题,谢谢!!! 数据库使用ACCESS,存取方式为ADO。 怎样设置数据库中的字段使其能够存取图片,及用C++BUILDER存取字段的方法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
我不懂电脑
2003-10-22
打赏
举报
回复
用一个TDBImage关联到Access的图片字段就可以存取图片了。
netwolver
2003-10-22
打赏
举报
回复
这也是我在CSDN上看到的关于解决数据库的问题,希望有帮助。
表名:mytable
表的字段:
mydate datetime
mytime datetime
mydata image
以下是一个显示二进制的函数:
LPSTR HexToASCii(char* buff, DWORD buffsize)
{
static LPSTR String = NULL;
if(String) { delete String; String = NULL; }
if( (buff==NULL)||(buffsize==0)||(String) ) return 0;
DWORD StrSize = buffsize * 3 + 2;
String = new char[StrSize]; // 申请了内存空间
memset(String,0,StrSize);
BYTE chTmp=NULL;
DWORD chAnd=0x000000F0;
DWORD StrIdx=0, index=0, ii;
for( index; index<buffsize; index++ )
{
for( ii=0; ii<3; ii++,StrIdx++)
{
if(ii==2) String[StrIdx] = ' '; else
{
if(ii) chAnd =0x0000000F; else chAnd = 0x000000F0;
chTmp = char(buff[index]&chAnd); // chAnd = ~chAnd;
if(chTmp>0x0F) chTmp = chTmp >> 4;
if(chTmp<0x0A) chTmp = chTmp + '0'; else chTmp = chTmp + ('A'-10);
String[StrIdx] = chTmp;
}
}//End of for( ii=0; ii<3; ii++,StrIdx++)
}//End of for( index; index<buffsize; index++ )
String[StrIdx] = NULL;
return String;
}
以下是我用来保存二进制数据到数据库的代码:
String sql;
char *p;
TMemoryStream *ms = new(TMemoryStream);
p=new BYTE[257];
ShowMessage(HexToASCii(p,257));
ms->WriteBuffer(p,256);
ShowMessage(IntToStr(ms->Position));
sql="Insert into mytable values(:pdate,:ptime,:pdata)";
Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text=sql;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->DataType=ftDate;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->Value=Date();
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->DataType=ftTime;
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->Value=Time();
Dm->AQ_Cpp->Parameters->ParamByName("pdata")->LoadFromStream(ms,ftBlob);
Dm->AQ_Cpp->ExecSQL();
delete p;
delete ms;
以下是我可以从数据库中读取二进制数据出来的代码:
Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text="select * from mytable";
Dm->AQ_Cpp->Open();
Dm->AQ_Cpp->Last();
TMemoryStream *ms = new(TMemoryStream);
TBlobField *pbf;
char *p;
p=new BYTE[257];
ms->Clear();
pbf=(TBlobField*)Dm->AQ_Cpp->Fields->FieldByName("mydata");
pbf->SaveToStream(ms);
ms->Position=0;
ms->ReadBuffer(p,256);
ShowMessage(HexToASCii(p,257));
ListBox1->Items->Clear();
for (int i=0;i<256;i++)
{
ListBox1->Items->Add(IntToStr((int)p[i]));
}
delete ms;
delete p;
****************************************
希望以上代码对大家有帮助!
zhusijin
2003-10-21
打赏
举报
回复
请问怎么操作呢?谢谢!!!
pcclever
2003-10-21
打赏
举报
回复
Access的字段可以设置为:OLE 对象 类型
Microsoft Access 表中链接或嵌入的对象(例如 Microsoft Excel 电子表格、Microsoft Word 文档、图形、声音或其他二进制数据)。
最多为 1 G 字节(受可用磁盘空间限制)。
huangjuliang
2003-10-21
打赏
举报
回复
这个不好,
找了一个贴子!
存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();
}
nobill
2003-10-20
打赏
举报
回复
你用一个字符字段来存储图片的路径,显示图片时,按路径去查找!
python3在安装第三方模块rpi.gpio模块是报错如下要怎么
解决
!!!
急
求
Collecting rpi.gpio Using cached https://files.pythonhosted.org/packages/af/2f/407b6e4cc8a0bdf4348 25a160bba1807991886b63cce16a5f1a6e1f24cdf/RPi.GPIO-0.6.5.tar.gz Installing collected packages: rpi.gp...
matlab 524288,Cannot display summaries of variables with more than 524288 elements. 怎么...
急
求
!!!!!!!!cnn进行MNIST手写数字库识别程序已调通但查看中间层
数据
却提示Cannot display summaries of variables with more than 524288 elements.后来查到可以保存为excel但保存为excel 时提示Index exceeds matrix dimensions.不知道该怎么办
求
解代码如下clear all% Hyper...
Maven详解之仓库------本地仓库、远程仓库
Dragon's Life 坚持,完成每一个目标! 目录视图 摘要视图 订阅 征文 | 从高考,到程序员 深度学习与TensorFlow入门一课搞定! 每周荐书 | Web扫描、HTML 5、Python(评论送书) Maven详解之仓库------本地仓库、远程仓库
“
数据
仓库之父”、DAMA一行来访中电金信交流
岗位:Java开发工程师时间:8.10题目实习OAuth2相关扫码登录的流程,怎么结合Redis的素材上传下载的流程,缓存的加入遇到的挑战,怎么
解决
的
数据
量多少。浪潮base济南,算法,已oc,今天是签约截止日期荣耀base北京,算法,10月7日录用决策中没有其他的offer或者池子了,流程中的还有一些国企银行运营商之类。爱信等了,今年ic太难。楼主武汉人,今天阳光开奖了,base 合肥有38,据说中央研究院一个月加班不到30小时,然后平时和周末加班都有加班费,明天就要逼签了,正好明天武汉台达开奖,估计。
[VB.NET]在线
急
等
问题
解决
方法!~~~
<script type="text/javascript"
数据库及相关技术
1,178
社区成员
18,939
社区内容
发帖
与我相关
我的任务
数据库及相关技术
C++ Builder 数据库及相关技术
复制链接
扫一扫
分享
社区描述
C++ Builder 数据库及相关技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章