当前位置: 开源爱好者 » 编程教程 » VC++教程 » 正文

VC++ ADO控制Access数据库创建并打开记录集

VC++ ADO控制Access数据库代码实例,使用ADO对象创建并打开Access数据库,建立 记录集,获取数据库记录并显示在窗口中:

BOOL CAdoCtrlAccessDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	//初始化环境
	::CoInitialize(NULL);
	//创建并打开数据库连接对象
	_variant_t vFieldValue;
	CString strFieldValue;
	m_pCon.CreateInstance(__uuidof(Connection));
	m_pCon->Open("students","","",NULL);
	//创建并打开记录集对象
	m_pRs.CreateInstance(__uuidof(Recordset));
	m_pRs->Open("select* from table1",m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	if(VARIANT_FALSE == m_pRs->EndOfFile)
    {
		//获得第一条记录并显示
		vFieldValue = m_pRs->GetCollect("id");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_nID = atoi(strFieldValue.GetBuffer(0));;
		vFieldValue.Clear();
		vFieldValue = m_pRs->GetCollect("name");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_strName = strFieldValue;
		vFieldValue.Clear();
    }
	UpdateData(FALSE);
	return TRUE;  // return TRUE  unless you set the focus to a control
}
HCURSOR CAdoCtrlAccessDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
//前一条记录
void CAdoCtrlAccessDlg::OnPrv()
{
	_variant_t vFieldValue;
	CString strFieldValue;
	//记录集指针前移一条
	m_pRs->MovePrevious();
	if(VARIANT_FALSE == m_pRs->FirstOfFile)
    {
		//获得当前条的数据并显示
		vFieldValue = m_pRs->GetCollect("id");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_nID = atoi(strFieldValue.GetBuffer(0));;
		vFieldValue.Clear();
		vFieldValue = m_pRs->GetCollect("name");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_strName = strFieldValue;
		vFieldValue.Clear();
		UpdateData(FALSE);
    }
	else
	{
		//定位到第一条
		m_pRs->MoveNext();
		AfxMessageBox("已经到第一条了");
	}
}
//后一条记录
void CAdoCtrlAccessDlg::OnNext()
{
	_variant_t vFieldValue;
	CString strFieldValue;
	//记录集指针后移一条
	m_pRs->MoveNext();
	if(VARIANT_FALSE == m_pRs->EndOfFile)
    {
		//获得当前条的数据并显示
		vFieldValue = m_pRs->GetCollect("id");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_nID = atoi(strFieldValue.GetBuffer(0));;
		vFieldValue.Clear();
		vFieldValue = m_pRs->GetCollect("name");
		strFieldValue = (char*)_bstr_t(vFieldValue);
		m_strName = strFieldValue;
		vFieldValue.Clear();
		UpdateData(FALSE);
    }
	else
	{
		//定位到最后一条
		m_pRs->MovePrevious();
		AfxMessageBox("已经到最后一条了");
	}
}
//修改记录
void CAdoCtrlAccessDlg::OnModify()
{
	UpdateData(TRUE);
	if(VARIANT_FALSE == m_pRs->EndOfFile)
	{
		//修改数据库记录
		_variant_t vFieldName,vFieldValue;
		CString strValue;
		vFieldName.SetString("id");
		strValue.Format("%d",m_nID);
		vFieldValue.SetString(strValue);
		m_pRs->Update(vFieldName,vFieldValue);
		vFieldName.Clear();
		vFieldValue.Clear();
		vFieldName.SetString("name");
		vFieldValue.SetString(m_strName);
		m_pRs->Update(vFieldName,vFieldValue);
		vFieldName.Clear();
		vFieldValue.Clear();
	}
}
void CAdoCtrlAccessDlg::OnDestroy()
{
	//关闭记录和连接
	m_pRs->Close();
	m_pCon->Close();
	//释放环境
	::CoUninitialize();
	CDialog::OnDestroy();
}

除此之外,本代码还尝试修改数据库指定记录,操作成成功后,在不需要记录集对象的时候,关闭记录集和连接。

CopyRight 2018© 开源爱好者 All Rights Reserved 豫ICP备16030607号 隐私声明 网站地图