VC++使用ADO开发ACCESS数据库
本文通过实例演示如何在VC++中使用ADO进行ACCESS数据库编程,并对涉及到的几个概念进行详细解释。
本文不对ADOACCESS的基本概念进行详细解释,主要包括以下内容:
第一部分 ADOADOX到底是什么,二者的作用和区别建立数据库
第二部分 ADOX创建ACCESS数据库
第三部分 ADO创建ACCESS数据库的表
第四部分 使用_ConnectionPtr接口开发ACCESS数据库
第五部分 使用_RecordsetPtr接口开发ACCESS数据库
第一部分 ADOADOX到底是什么,二者的作用和区别
ADOMicrosoft 最新推出的数据库访问的高层软件接口。它和Microsoft以前的数据库访问接
DAORDO相比具有更大的灵活性,使用也更方便,开发效率大为提高。
ADOX是核心ADO对象的扩展库。它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。要使用ADOX,则应建立对ADOX类型库的引用。ADOX库文件名为 Msadox.dll
通俗地讲,ADO是访问数据库的一种接口,可以使用它方便地进行数据库编程。而ADOX是微软对ADO功能的扩展,比如:可以ADOX创建数据库(而ADO没有创建数据库的功能)。
第二部分 ADOX创建ACCESS数据库
ADOX创建access数据库方法很简单,只需要创建一个Catalog对象,然后调用它的Create方法就可以了。
例程ADOXCreateDatabase演示如何使用ADOX创建一个ACCESS数据库。
打开VC++ 6.0,新建一个基于对话框的工程ADOXCreateDatabase。在对话框IDD_ADOXCREATEDATABASE_DIALOG中添加一个编辑框IDC_DBNAME和一个按钮IDC_BTN_CREATE,编辑框用以输入数据库名称。
使用ClassWizard给编辑框创建一个CString变量m_dbName
双击IDC_BTN_CREATE按钮,并编辑OnBtnCreate()函数如下:
void CADOXCreateDatabaseDlg::OnBtnCreate()
{
    //使输入到编辑框IDC_DBNAME的内容更新到m_dbName变量中
    UpdateData(TRUE);
    CString str;
    str="d:\\"+m_dbName+".mdb";
    //检查该数据库是否已经存在,如果该数据库已经存在,弹出消息框,返回
    //使用API函数PathFileExists()检查路径文件是否存在
    //请注意:为了使用API函数PathFileExists(),需要加入
    //#include "Shlwapi.h"
    //#pragma comment(lib,"shlwapi.lib")
    if(PathFileExists(str))
    {
        CString strTemp;
        strTemp.Format("%s已存在!",str);
        AfxMessageBox(strTemp);
        return ;
    }
    //定义ADOX对象指针并初始化为NULL
    //ADOX创建access数据库方法很简单,
    //只需要新建一个Catalog对象,然后调用它的Create方法就可以了。
    //Catalog ADOX 的一个对象,它包含描述数据源模式目录的集合。
    //在这里,您只需知道创建数据库时使用这个对象就可以了。
    //注意用atch组合捕捉错误
    _CatalogPtr m_pCatalog = NULL;
    CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";
    DBName=DBName+str;
    try
    {
        m_pCatalog.CreateInstance(__uuidof(Catalog));
        m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));
    }
    catch(_com_error &e)
access数据库用什么软件    {
        AfxMessageBox(e.ErrorMessage());
        return ;
    }   
}
使用ADOX,需要引入ADOX的动态链接库msadox.dll,即在stdafx.h中加入如下语句:
#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")
另外,ADOX属于COM对象,所以要在CADOXCreateDatabaseApp::InitInstance()函数中加
入:
    if(!AfxOleInit())
    {
        AfxMessageBox("OLE初始化出错!");
        return FALSE;
    }
初始化COM
好了,编译并运行该例程,对于编译过程中弹出的4146号警告不要理会。在编辑框中输入一个数据库名称,点击“创建数据库”按钮,该数据库将在d盘根目录下创建,再次输入该数据库名称并点击“创建数据库”按钮,将弹出警告对话框。
vc中使用ADO的时候会得到4146号警告信息,我们可以不去理会,也可以通过#pragma warning指令解决,方法为:
将在stdafx.h中加入的语句:
#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")
前后再加一条语句,修改后为:
#pragma warning (disable:4146)
#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")
#pragma warning (default:4146)
指令#pragma warning (disable:4146) 暂时屏蔽编译时4146警告信息
指令#pragma warning (default:4146) 重置编译器的4146警告到默认状态
第三部分 ADO创建ACCESS数据库的表
我们一般用ADOX创建数据库,然后再用ADO创建数据库的表。
例程CREATE_DB_AND_TABLE演示如何使用ADO创建ACCESS数据库的表。
打开VC++ 6.0,新建一个基于对话框的工程CREATE_DB_AND_TABLE。在对话框IDD_CREATE_DB_AND_TABLE_DIALOG中添加如下控件:
控件名称
ID
用途
编辑框
IDC_DBNAME
输入数据库名称
按钮
IDC_BTN_CREATE
创建数据库
编辑框
IDC_TABLENAME
输入表名
按钮
IDC_BTN_CREATE_TABLE
创建表
使用ClassWizard给两个编辑框创建CString变量:
编辑框
CString变量
编辑框IDC_DBNAME
m_dbName
编辑框IDC_TABLENAME
m_tableName
双击IDC_BTN_CREATE按钮,并编辑OnBtnCreate()函数如下:
void CADOXCreateDatabaseDlg::OnBtnCreate()
{
    UpdateData(TRUE);
    CString str;
    str="d:\\"+m_dbName+".mdb";
    if(PathFileExists(str))
    {
        CString strTemp;
        strTemp.Format("%s已存在!",str);
        AfxMessageBox(strTemp);
        return ;
    }
    _CatalogPtr m_pCatalog = NULL;
    CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";
    DBName=DBName+str;
    try
    {
        m_pCatalog.CreateInstance(__uuidof(Catalog));
        m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));
    }
    catch(_com_error &e)
    {
        AfxMessageBox(e.ErrorMessage());
        return ;
    }   
}
以上代码例程ADOXCreateDatabase中已经详细叙述。
双击IDC_BTN_CREATE_TABLE按钮,并编辑OnBtnCreateTable()函数如下:
void CCREATE_DB_AND_TABLEDlg::OnBtnCreateTable()
{
    //先判断表名编辑框是否为空
    UpdateData(TRUE);
    if(!m_tableName.IsEmpty())
    {
        ADOX::_CatalogPtr m_pCatalog=NULL;
        ADOX::_TablePtr m_pTable=NULL;
        CString str;
        str="d:\\"+m_dbName+".mdb";
        CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";
        DBName=DBName+str;
        //这段代码先检查表是否已经存在,如果表已经存在,不再创建,直接返回。
        //其实这段代码不必深入研究,只需知道它的功能,直接拿来使用即可
        try
        {
            m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
            m_pCatalog->PutActiveConnection(_bstr_t(DBName));
            int tableCount=m_pCatalog->Tables->Count;
            int i=0;
            while(i<tableCount)
            {
                m_pTable=(ADOX::_TablePtr)m_pCatalog->Tables->GetItem((long)i);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。