用MFC + ADO 把jpg图象文件放入ACCESS库中
2006-07-23 11:18:31 来源:WEB开发网核心提示: extern CWYApp theApp;7. 使用纪录集:try{m_pRecordset.CreateInstance("ADODB.Recordset");m_pRecordset->Open("SELECT * FROM 客户 ORDER BY
extern CWYApp theApp;
7. 使用纪录集:
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM 客户 ORDER BY 客户id",
_variant_t((IDispatch*)theApp.m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error e)///捕捉异常
{
AfxMessageBox("读取数据库失败!");///显示错误信息
}
CPicture类(它能够显示JPG.GIF等等图片,详情请看CPicture.h头文件)
CPicture.h
CPicture.cpp
二、流程图
你一看便知: ADO作用在buffer内存和ACCESS2002数据库之间,而CPicture作用在buffer内存和显示窗口之间.
三、将jpg存入库并显示
void COneDlg::OnButton1()
{
CFile f;
CString FilePathName;
CFileException e;
CFileDialog dlg(TRUE,NULL,NULL,0,"jpg Files (*.jpg)|*.jpg||",this);
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName();
if(m_Pic.m_IPicture != NULL) m_Pic.FreePictureData(); // Important - Avoid Leaks...
if(f.Open(FilePathName, Cfile::modeRead | Cfile::typeBinary, &e)) //打开了一个jpg文件
{
int nSize = f.GetLength(); //先得到jpg文件长度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
if (f.Read(pBuffer, nSize) > 0 ) //把jpg文件读到pBuffer(堆上申请一块内存)
{
BYTE *pBuf = pBuffer; ///下面这一大段是把pBuffer里的jpg数据放到库中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset->AddNew();
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nSize; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("j")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
(m_Pic.LoadPictureData(pBuffer, nSize));//接作调用函数读pBuffer的jpg数据准备显示
delete [] pBuffer; //删掉堆上申请的那一块内存
pBuf=0; //以防二次乱用
}
f.Close();
}
CClientDC dc(this);
m_Pic.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels
m_Pic.Show(&dc, CRect(200,0,200+m_Pic.m_Width,m_Pic.m_Height) );//显示出来看看
}
}
.......
完整的例子中有较多的中文说明,对你有用吗!?,有什么不妥之处请高手指教.
[]
- ››MFC中有多个slider时OnHScroll函数判断方法
- ››MFC自绘按钮
- ››Adobe发布Acrobat X 不支持苹果iOS系统
- ››Adobe公司展示plenoptic lenses技术
- ››Adobe:移动版Flash实测性能高于HTML5视频
- ››Adobe更新Web版Photoshop 无需注册即可使用
- ››Adobe Flash 10.1被曝支持Android效果不佳
- ››Adobe Flash 10.1 for Android 版本被曝工作状况不...
- ››Adobe CEO:不担心iPhone和iPad封Flash技术
- ››Adobe为iPad、Android平台发布免费Photoshop
- ››Adobe发布Android版Flash 10.1 Beta 3
- ››MFC打印预览、映射模式、坐标变换
赞助商链接