vc对Access数据库访问方法

在StdAfx.h文件中,#endif // _AFX_NO_AFXCMN_SUPPORT之前,加入:
#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
接着, 在My.cpp文件InitInstance方法中, AfxEnableControlContainer();之前,加入:
 if(!AfxOleInit())  //初始化
 { AfxMessageBox( " initialize false!" ); }
我定了一个类,方便使用:

//  ADODB.h
class  CADODB
{
public:
    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset;
    _CommandPtr m_pCommand;
    BOOL bOpenDB;
    CString m_strSQL;

    CADODB();
    
void ADOConnection();    //打开连接数据库
    void ADOClose();    //关闭断开数据库
    BOOL ADOUpdata(CString strCommand);     //更新操作,新建,删除,修改
    _RecordsetPtr ADOSelect(CString strCommand);     //返回查询结果集
}
;
extern  CADODB ADOCtrl;

 

// ADODB.cpp

CADODB ADOCtrl;

CADODB::CADODB()
{                   bOpenDB = FALSE;
}


void  CADODB::ADOConnection()
{    CHAR DBfilePath[MAX_PATH];
    CString m_strdir;
    
    m_pConnection.CreateInstance(
"ADODB.Connection");
    m_pRecordset.CreateInstance(
"ADODB.Recordset");
    m_pCommand.CreateInstance(
"ADODB.Command");

    GetCurrentDirectory(MAX_PATH,DBfilePath);
    m_strdir.Format(
"%s/config.udl",DBfilePath);  /这里使用.udl连接文件, 我是udl,mdb,exe都放在同一目录下
    strtemp.Format(
"File Name=%s",m_strdir);
    m_pConnection
->ConnectionString = (_bstr_t)strtemp;   /注意使用时,数据类型变换
    m_pConnection
->Open("","","",NULL);
    m_pCommand
->ActiveConnection = m_pConnection;
    bOpenDB 
= TRUE;    
}


void  CADODB::ADOClose()
{    if (bOpenDB)
    
{
        m_pConnection
->Close();
        m_pConnection.Release();
        m_pRecordset.Release();
        m_pCommand.Release();
    }

}


BOOL CADODB::ADOUpdata(CString strCommand)
{
    
if (!bOpenDB)
    
{    return FALSE;    }

    m_pCommand
->CommandText = (_bstr_t)strCommand;
    m_pCommand
->Execute(NULL,NULL,adCmdText);          //执行操作

    
return TRUE;
}


_RecordsetPtr CADODB::ADOSelect(CString strCommand)
{
    
if (!bOpenDB)
    
{    return NULL;     }

    m_pCommand
->CommandText = (_bstr_t)strCommand;
    
return m_pCommand->Execute(NULL,NULL,adCmdText);
}

使用举例:

 ADOCtrl.m_strSQL.Format( " SELECT * FROM MyTable " );   // SQL语句
 ADOCtrl.ADOConnection();
 ADOCtrl.m_pRecordset 
=  ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
 
while ! ADOCtrl.m_pRecordset -> adoEOF )
 
{   //获取字段信息, 注意字符类型变换: CString <-> CHAR* <-> _bstr_t
  CString str = (CHAR*)(_bstr_t)ADOCtrl.m_pRecordset->GetCollect("NAME");
  ADOCtrl.m_pRecordset
->MoveNext();
 }

 ADOCtrl.ADOClose();

 ADOCtrl.m_strSQL.Format(
" INSERT INTO MyTable(NAME,AGE) VALUES ('%s','%d') " ,myname,age);
  // SQL语句
 ADOCtrl.ADOConnection();
 ADOCtrl.ADOUpdata(ADOCtrl.m_strSQL);  
// 插入一条记录
 ADOCtrl.ADOClose();

PS:
// Get the max ID value;
ADOCtrl.m_strSQL.Format("SELECT MAX(ID) as mID FROM GeneralTable");
ADOCtrl.m_pRecordset = ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
_variant_t mmID = ADOCtrl.m_pRecordset->GetCollect("mID");
int newID = ++mmID.intVal;  //将_variant_t的数据类型变成整型

关于.udl的使用:
1."提供程序"->选择:Microsoft Jet 4.0 OLE DB Provider;
2."连接"->输入数据库名称(可直接写数据库名, 不要加地址);登录信息不动;
3."所有"->Data Source 的值为 数据库名全称 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值