如何在数据库中存入位图?

chenxi 2000-04-14 12:16:00
我的DBMS 为SQL SERVER 7.0.应用程序用VC6.0开发。
位图字段类型为Binary,用ClassWizard 自动生成了CMyRecordSet 类,将位图字段
映射为CLongBinary 类型的成员变量(m_image)。
我试图向表中插入一字段。以下为我的代码:
m_pSet ->AddNew();
m_pSet ->SetFieldDirty(NULL);
if ( m_pSet ->m_image.m_hData) GlobalFree ( m_pSet ->m_image.m_hData);
m_pSet ->m_image.m_hData = GlobalAlloc(GMEM_FIXED,iSize);
m_pSet ->m_image.m_dwDataLength = iSize;
void * pGlobal = GlobalLock(m_pSet ->m_image.m_hData);
...... //fill the imagedata into the global buffer
GlobalUnlock(m_pSet ->m_image.m_hData);
...... // fill the other field.
m_pSet ->Update();
但是执行完后查看数据库记录,该图象字段并没有写入,如果让图象字段禁止为NULL的话,执行到这儿就回弹出错误框,指示图象字段不能为NULL。
请问各位我如何解决这个问题?
...全文
268 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
simon_sun 2000-04-22
  • 打赏
  • 举报
回复
你需要调用SetFieldNull成员函数,设置该blob字段值为非空;该函数与SetFieldDirty配合使用才有效果。详细信息参考CRecordSet类实现源码
telan 2000-04-17
  • 打赏
  • 举报
回复
对于CLongBinary字段,好象是要明确调用函数
SetFieldDirty(..)才有作用。


另外,微软已经建议用CByteArray,
而不用CLongBinary:

CByteArray d;
for(int i=0; i<size;++i)
d.SetAtGrow(i, ch);
usage 2000-04-17
  • 打赏
  • 举报
回复
把你的m_hData里的内存数据转成16进展制字符串,如
0X45D042A94845....
再ExeSQL( "INSERT INTO table VALUE('0X45D042A94845....' )" );
free_wind 2000-04-14
  • 打赏
  • 举报
回复
我也想知道一下,关注!
chenxi 2000-04-14
  • 打赏
  • 举报
回复
OpenBall 我申请到了内存了。GlobalAlloc 返回值非0。
OpenBall 2000-04-14
  • 打赏
  • 举报
回复
检查一下你是否真的申请到内存了?
显示一下内存大小是否为零?

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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