中国海关药品入境:我想请问下将图片保存在access数据库的问题(vc)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 00:42:47
有谁帮我找个地址么~?相关文章哎 或者把代码发给我研究吧 谢谢啦 vckbase上面的那个将jpg存入数据库的例子我能模仿着写 图片是存入数据库里面了 但是老出错`` 谁能再给我个例子好么 我会加分的``再次非常感谢``

定义了一个以CObject为基类的CDib类(CDaoRecordView的派生类里定义了CDib对象成员m_DIB),其中包括一下成员和方法:
CByteArray m_bufDIB;
BOOL Create(CByteArray& ba);
BOOL Create(CFile& bmpFile);
BOOL Paint(HDC hDC);
----m_bufDIB是存储位图数据的缓冲区。为简便起见,它不包含包装信息和BITMAPFILEHEADER结构。这样对数据库更新后,原有的“OLE对象”类型将变成“长二进制数据”,不能在ACCESS里查看了。
----第一个Create()重载方法的参数ba是记录集的位图数据(比如m_image),使用CByteArray::Copy()把数据复制给m_bufDIB;第二个Create()方法的参数bmpFile是已打开的位图文件,使用CFile::ReadHuge()把文件里的数据读入m_bufDIB(放弃前面的BITMAPFILEHEADER结构):
DWORDdwBufSize;
dwBufSize=bmpFile.GetLength();//获得文件长度
bmpFile.Seek((long)sizeof(BITMAPFILEHEADER),
CFile::begin);//放弃文件头
dwBufSize-=sizeof(BITMAPFILEHEADER);
m_bufDIB.SetSize(dwBufSize);//设置缓冲区大小
file.ReadHuge((LPSTR)(m_bufDIB.GetData()),dwBufSize);
……
----Paint()方法调用了SetDIBitsToDevice()函数(根据情况也可以使用StretchDIBits()),参数hDC是CDaoRecordview的资源中的一个静态控制的设备句柄,作为SetDIBitsToDevice()的第一个参数。如果不是16或24位的位图,还需要建立和设置调色板。Paint()方法除了在CDaoRecordView派生类的OnMove()里调用外,也被OnPaint()调用(最好不在OnDraw()里调用):
void CDerivedView::OnPaint()
{
CPaintDC dc(this);
CClientDC dc1(&m_ctlImage);
if(m_DIB.Create(m_pSet->m_image))
m_DIB.Paint(dc1.m_hDC);
}
----首先采用的方法是,每当打开一个位图文件,调用m_DIB.Create()和m_DIB.Paint(),然后复制给m_pSet->m_image,再设置“脏”标识:
if(m_DIB.Create(bmpFile))
{
CClientDC dc(&m_ctlImage);
m_DIB.Paint(dc.m_hDC);
(m_pSet->m_image).Copy(m_DIB.m_bufDIB);
SetFieldDirty(&(m_pSet->m_image));
}
----记录滚动时,OnMove()调用Update()对数据进行更新。
----但是这样做的结果是,只有在域的内容不为空(NULL)的时候才能更新数据。也就是说,添加“长二进制数据”不能实现。
----发现使用SeieldValue()可以实现添加和替换。但由于未知的原因,还需要把另外某个域设置为“脏”才行:
if(m_DIB.Create(bmpFile))
{
CClientDC dc(&m_ctlImage);
m_DIB.Paint(dc.m_hDC);
(m_pSet->m_image).Copy(m_DIB.m_bufDIB);
// 只 为OnPaint() 调 用 时 使 用
m_pSet->SetFieldValue(_T("[image]"),
COleVariant(m_DIB.m_bufDIB));
m_pSet->SetFieldDirty(&(m_pSet->m_name));
// 任 意 另 外 一 个 域
}
----如果打算删除数据库里的位图数据,可以把一个“空”的CByteArray对象替换原来的就行了。

我觉得还是把图片放在一个文件夹里. 数据库里面只记地址 这样会好一些. 呵呵 不然的话图片转成数据 存取很占时间 ,把图片转换成二进制把转换后的二进制存如数据库(ASP,ASP.NET和其他动态网页编辑语言都可以实现)