VC-用MFC + ADO 把jpg图象文件放入ACCESS库中

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

用MFC + ADO 把jpg图象文件放入ACCESS库中


网上好象这个例子还没有样,如果你用VC做一个人事部管理系统,不可能没有人员照片吧!能找到的例子中都是用BMP,不敢用!
这个例子用到了VC6.0和access2002(officeXP),涉及到ADO的用法,文件对话框的使用,一个CPicture类和一个buffer缓冲区。

一、我的ADO用法整理

1. stdafx.h头文件中加入:

#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
2. 应用程序初始化中加入:
 
AfxOleInit();

HRESULT hr;
try
{
    hr 
= m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    if(SUCCEEDED(hr))
    
{
    hr 
= m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=wy.mdb","","",adModeUnknown);///连接数据库
    
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;

    }

}

catch (_com_error e) ///捕捉异常
{
    CString errormessage;
    errormessage.Format(
"打开 wy.mdb 数据库失败! 错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);
///显示错误信息
}



3. 应用程序EXIT中加入:
if (m_pConnection->State) 
m_pConnection->Close();
4. 应用程序中加入:
_ConnectionPtr m_pConnection;
5. 对话框类中加入:
_RecordsetPtr m_pRecordset;
6. 注意使用:
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) );//显示出来看看
    }
 

}

 
VS(MFC)保存图片到SQLServer数据库 MFC中将图片以二进制格式直接保存到SQLServer数据库 阅读详情

相关推荐

MFC在Picture Control上存储图片(image)

方法一:m_LogPersonLiveBmp.DeleteObject(); m_LogPersonLiveBmp.LoadBitmap(IDB_FACE); ((CStatic*)GetDlgItem(IDC_STATIC_IDPHOTO))->SetBitmap((HBITMAP)m_LogPersonLiveBmp); ((CStatic*)GetDlgItem(IDC

happy_xiahuixiax的博客 1726

mfc+access数据库,加入存取图片

现在把图片存到数据库里面,用二进制流

VC利用ADO实现ACCESS 数据库JPG图片的存储 查询

这个例子是我从http://www.vckbase.com上面下载下来的 我发现它的功能实现效果不好 我又对它进行了改进 基本已经能完善的实现上面展示的图片存储 查询 希望对大家有帮助

VC++Access数据库的操作(查询、插入、更新、删除等)

Microsoft Office Access是由微软发布的关系数据库管理系统。Access数据库常应用于小型软件系统中,比如:生产管理、销售管理、存管理等各类企业管理软件,其最大的优点是:简单易学、使用灵活。 下面我们结合实例来详细说明,在VC++ MFC中,如何使用Access数据库文件进行数据的存储,如何实现对数据库中数据的查询、插入、更新和删除等操作。 (实例可在我的CSDN资源中下

小木头工作室 2万+

(一)VC保存和显示数据库图像(BMP)

<br />源码下载:<br />程序运行界面显示如下:<br /> <br /> <br /><br />简述关键代码如下:<br />1、保存图片数据到数据库<br />以下是代码片段:<br />//BMP图片保存到数据库 <br />    try <br />    { <br />        _RecordsetPtr    pRecordset; <br />        pRecordset.CreateInstance(__uuidof(Recordset)); <br />    

专注于技术开发、项目管理 1415

JPG,BMP,PNG图片插入到ACCESS数据库

JPG,BMP,PNG图片插入到ACCESS数据库,EmbarcaderoRADStudioXE6编译通过。 C/C++ code ? 1 2 #include #include C/C++ code ? 1 2 3

汐彤工作室 3878

MFC + ADOjpg图象文件放入ACCESS

网上好象这个例子还没有样,如果你用VC做一个人事部管理系统,不可能没有人员照片吧!能找到的例子中都是用BMP,不敢用!这个例子用到了VC6.0和access2002(officeXP),涉及到ADO的用法,文件对话框的使用,一个CPicture类和一个buffer缓冲区。 一、我的ADO用法整理1. stdafx.h头文件中加入: #import "c:/program files/common...

weixin_33778778的博客 180

VC知识搜索ADO

  [第1页/共2页] 下一页 ADO操作access全过程和CListCtrl的用法 详细信息 提供Ado操作access的实例。[文档属性] VC原创文档[中文][文档作者] 张展明 [更新日期] 2004-11-4 11:17:00 [浏览次数] 3090相关评论 VC++6.0 中用 ADO 存取 Access 数据库的一点总结

new...... 2833

VC:添加图片

总体:对于普通的BMP\DIB格式的图片,GDI中提供了LoadImage()函数;对于PNP、JPG、GIF、等格式的文件VC++中提供了OleLoadPicture()函数。 一、 1、创建一个单文档应用程序,并在View类中添加函数、变量如下: void LoadPicture(); LPPICTURE m_picture; ...

acass424022的博客 198

VC++数据库连接Access

以前的时候用VC写了两种连接Access数据库的方法,为了方便以后查找把这两种方法做一下简单的介绍。Windows平台的数据接口标准有ODBC、OLE DB、ADO和Borland的BDE接口,ODBC(Open DataBase Connectivity)只能用于访问关系型数据库,为了访问非关系型数据微软设计了OLE DB接口并在此基础上推出了ADO(ActiveX Data Objects)。

Howard_Liu1314的专栏 738

VC++将BMP图片存入Access数据库

摘要:VC/C++源码,数据库应用,BMP,位图   本实例演示如何使用VC++将BMP图片存入Access数据库,注意Access字段的类型及长度值,测试时请注意,要运行程序必须将数据库文件userinfo.mdb与可执行文件放在一起,如果在vc开发环境中运行,则需要将该数据库文件放在工程目录下。

vc存取jpg图片到access数据

vc存取jpg图片到access数据,适应于acces为2007以上版本的

VC处理ACCESS中的位图数据

VC处理ACCESS中的位图数据癫侠于2000-08-17下午05:49:58发表:----比较复杂的数据库中一般会有位图数据(比如相片)。虽然这类“OLE对象”的插入、删除以及替换操作在ACCESS里容易实现,在VC中却显得复杂而且颇费周折。以下把作者用VC处理ACCESS数据库中的位图数据的体会简单叙述一下,以请教于大家。----在CdaoRecordset派生类的对象中,VC自动为ACCE

糯米糊糊的专栏 2943

VC保存和显示数据库图像(JPG、JPEG)

<br />源码下载:http://download.csdn.net/source/2840272<br />程序运行界面显示如下:<br /><br /><br /><br />简述关键代码如下:<br /> <br />1、保存图片数据到数据库<br />以下是代码片段:<br />//JPG图片保存到数据库 <br />    try <br />    { <br />        _RecordsetPtr    pRecordset; <br />        pRecordset.Cre

专注于技术开发、项目管理 1773

关于用 VC++6.0新建access需要注意的

网上有很多人写了怎么用vc生成access,都不太完整,搬来运行,都有些毛病,现理一份完整的,可以直接运行的,说明如下:(大部分代码都来自网上,有些细节提示一下) 使用的环境:vc++6.0 sp6,office2007(不知道其他的是否可以,没试过) 以下代码转自:http://www.cnblogs.com/suhuaiqiang/archive/2010/09/06/181935

Adrian 博客 1124

winform中将图片保存到数据库数据库中读取显示到picturebox上封装imageHelper

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Imaging; namespace Common { public static class Im...

sd6275832ght的博客 1166
上一篇: 生活-干蚕豆去皮
下一篇: 数据结构及算法-何谓数据结构
MasterFT
博客等级 码龄20年 48粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值