首页 > 软件专区 > Access >

vc连接access数据库:[1]ODBC方法

来源:互联网 2023-03-16 15:41:23 442

vc连接access数据库的方法有很多,接下来的几天里我会一一分享出来的。这篇中我们使用ODBC方法连接。UoA办公区 - 实用经验教程分享!

工具/原料

  • vc6.0
  • Microsoft Office 2003

方法/步骤

  • 1

    我们首先要建一个access数据库文件,按Win键,选择所有程序,找到Microsoft Office Access 2003,打开。点击文件,新建,空数据库,保存在桌面上,使用设计器创建表。输入表的信息,点击关闭按钮,是否保存选择是,表名改为Table1。在在桌面上我们看到有一个db1.mdb的文件。UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 2

    用ODBC方法连接数据库要创建数据源,下面我们来创建数据源。按Win R键(或者 所有程序-附件-运行),调出运行框,输入 control.exe调出控制面板。将查看方式改为 小图标,找到管理工具,数据源(ODBC),双击进入。在用户DSN上 添加,选择access数据库文件驱动,完成。输入数据原名,我们输入db1(这个要和程序中的保持一致),点击选择(路径),因为数据库在桌面,所以我们选择桌面的路径:C:\Users\Administrator\Desktop,选择好之后,在数据库名下方的列表框里会显示文件夹下的数据库名,我们选中db1.mdb,点击确定。数据源就配置好了。注意,在配置数据源的时候,要将数据库文件关闭,否则会出错。(因为接下来的篇幅会比较长,所以在这里只能初略地讲下数据源的配置,有疑问的朋友可以在网上找些相关的资料)UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 3

    数据源配置好之后,我们就开始进行程序设计。打开vc6.0,新建一个MFC的基本对话框工程,我们取名叫“ODBC1"。新建一个类型为generic class的类,类名为CMeAccess1(对此有疑问的可以查看下我的前两篇经验,分别是vc操作word和vc操作excel)UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 4

    在文件视图区打开MeAccess1.h文件,加入以下代码:UoA办公区 - 实用经验教程分享!

    首先加入头文件UoA办公区 - 实用经验教程分享!

    #include"afxdb.h"UoA办公区 - 实用经验教程分享!

    其次加入变量和函数的申明UoA办公区 - 实用经验教程分享!

    public:UoA办公区 - 实用经验教程分享!

    BOOL ConnectDB(const char*szDNS,const char*szUID,const char*szAuthStr); //连接数据库UoA办公区 - 实用经验教程分享!

    BOOL DisConnectDB(); //断开连接UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    BOOL ExeSqlDirect(const char*szSQL); //执行SQL语句UoA办公区 - 实用经验教程分享!

    SQLHENV m_henv; //环境句柄UoA办公区 - 实用经验教程分享!

    SQLHDBC m_hdbc; //连接句柄UoA办公区 - 实用经验教程分享!

    SQLHSTMT m_hstmt; //文字句柄UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 5

    接着打开MeAccess1.cpp文件,其代码如下(比较长,但逻辑相当简单):UoA办公区 - 实用经验教程分享!

    CMeAccess1::CMeAccess1() //在构造函数中初始化句柄为空UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    this->m_hdbc=NULL;UoA办公区 - 实用经验教程分享!

    this->m_henv=NULL;UoA办公区 - 实用经验教程分享!

    this->m_hstmt=NULL;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    CMeAccess1::~CMeAccess1() //在析构函数中断开连接UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    DisConnectDB();UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    BOOL CMeAccess1::ConnectDB(const char*szDNS,const char*szUID,const char*szAuthStr)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLRETURN ret;UoA办公区 - 实用经验教程分享!

    ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_henv);UoA办公区 - 实用经验教程分享!

    if((ret!=SQL_SUCCESS) && (ret!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("分配环境句柄失败!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    ret=SQLSetEnvAttr(m_henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);UoA办公区 - 实用经验教程分享!

    if((ret!=SQL_SUCCESS) && (ret!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("设置环境属性!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    ret=SQLAllocHandle(SQL_HANDLE_DBC,m_henv,&m_hdbc);UoA办公区 - 实用经验教程分享!

    if((ret!=SQL_SUCCESS) && (ret!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("分配连接句柄失败!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    ret=SQLConnect(m_hdbc,(SQLTCHAR*)szDNS,SQL_NTS,(SQLTCHAR*)szUID,SQL_NTS,(SQLTCHAR*)szAuthStr,SQL_NTS);UoA办公区 - 实用经验教程分享!

    if((ret!=SQL_SUCCESS) && (ret!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("连接数据库失败!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    return TRUE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    BOOL CMeAccess1::DisConnectDB()UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    if(this->m_hdbc!=NULL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLFreeHandle(SQL_HANDLE_DBC,m_hdbc);UoA办公区 - 实用经验教程分享!

    m_hdbc=NULL;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    if(this->m_henv!=NULL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLFreeHandle(SQL_HANDLE_ENV,m_henv);UoA办公区 - 实用经验教程分享!

    m_henv=NULL;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    if(this->m_hstmt!=NULL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLFreeHandle(SQL_HANDLE_STMT,m_hstmt);UoA办公区 - 实用经验教程分享!

    m_hstmt=NULL;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    return TRUE;UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    BOOL CMeAccess1::ExeSqlDirect(const char *szSQL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLRETURN retcode;UoA办公区 - 实用经验教程分享!

    if(m_hstmt!=NULL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    SQLFreeHandle(SQL_HANDLE_STMT,m_hstmt);UoA办公区 - 实用经验教程分享!

    m_hstmt=NULL;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    if(this->m_hdbc==NULL)UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("未连接至数据库,请先建立连接!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    retcode=SQLAllocHandle(SQL_HANDLE_STMT,m_hdbc,&m_hstmt);UoA办公区 - 实用经验教程分享!

    if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("分配语句句柄失败!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    retcode=SQLExecDirect(m_hstmt,(SQLTCHAR*)szSQL,SQL_NTS);UoA办公区 - 实用经验教程分享!

    if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO))UoA办公区 - 实用经验教程分享!

    {UoA办公区 - 实用经验教程分享!

    AfxMessageBox("执行SQL语句失败!");UoA办公区 - 实用经验教程分享!

    return FALSE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    return TRUE;UoA办公区 - 实用经验教程分享!

    }UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 6

    下面我们在对话框类中申明一个变量 CMeAccess1 m_meAccess1;UoA办公区 - 实用经验教程分享!

    在对话框初始化函数OnInitDialog中加入下列代码:UoA办公区 - 实用经验教程分享!

    m_meAccess1.ConnectDB("db1","","");UoA办公区 - 实用经验教程分享!

    m_meAccess1.ExeSqlDirect("Insert Into Table1(name,age,sex,birthday) values('Qn',1,'Girl',2014-1-1)");UoA办公区 - 实用经验教程分享!

    UoA办公区 - 实用经验教程分享!

  • 7

    点击运行,没有错误,在桌面上打开db1.mdb,发现里面插入了一条数据UoA办公区 - 实用经验教程分享!

    vc连接access数据库:[1]ODBC方法UoA办公区 - 实用经验教程分享!

  • 8

    总结:ODBC连接数据库的基本步骤:UoA办公区 - 实用经验教程分享!

    1、建立数据库UoA办公区 - 实用经验教程分享!

    2、分配数据源UoA办公区 - 实用经验教程分享!

    3、分配环境句柄、设置环境属性UoA办公区 - 实用经验教程分享!

    4、分配连接句柄UoA办公区 - 实用经验教程分享!

    5、连接数据库UoA办公区 - 实用经验教程分享!

    6、分配文字句柄UoA办公区 - 实用经验教程分享!

    7、执行SQL语句UoA办公区 - 实用经验教程分享!

    8、断开连接UoA办公区 - 实用经验教程分享!

  • 8此文章未经授权抓取自百度经验
  • 9

    补充,以上操作都是在Win7系统上进行的。换了XP系统没有成功,不知道是什么原因。有时间会调试下...UoA办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!UoA办公区 - 实用经验教程分享!


    标签: ACCESS

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码