请教:将图片存入SQL数据库的image字段,使用流类,出错,怎么解决?

cokeclassic 2002-08-14 12:42:35
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->Append();
TBlobField * pBlob=(TBlobField *)ADOQuery1->FieldByName("myphoto");
TBlobStream *pStream=new TBlobStream(pBlob,bmReadWrite);//程序执行到此出错
Project Project1.exe raised exception class EInvalidCast with message
'Invalid class typecast'.Process stopped,Use Step or Run to continue.
应该怎样修改?
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT-司马青衫 2002-08-15
  • 打赏
  • 举报
回复
如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(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");
TBlobStream * pmem=new TBlobStream(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();
如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
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();
kingcaiyao 2002-08-14
  • 打赏
  • 举报
回复
对,应该是TADOBlobStream。
gfh21cn 2002-08-14
  • 打赏
  • 举报
回复
ODBC的连接才是用TBlobStream


gfh21cn 2002-08-14
  • 打赏
  • 举报
回复
应该是用 TADOBlobStream而不是 TBlobStream


gfh21cn 2002-08-14
  • 打赏
  • 举报
回复
这个方法倒是挺方便的啊

jishiping 2002-08-14
  • 打赏
  • 举报
回复
使用CreateBlobStream,对ADO还是BDE都有效,是通用的写法。直接new一个
TBlobStream,那是给BDE用的,直接用TADOBlobStream,那是给ADO使用的。
而CreateBlobStream是通用的。
TStream *pStream = ADOQuery1->CreateBlobStream(pBlob, bmReadWrite);

1,178

社区成员

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

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