296上位机VC MFC使用ADO实现记录集统计功能
296上位机VC MFC使用ADO实现记录集统计功能展示
ADO数据库程序中,对满足条件的数据个数统计也是很常用的功能,我们当前例程就演示对满足条件的ID数目进行统计,并将统计的结果显示在编辑框中,效果如图,设定好要统计的ID条件后,点击<统计满足下面ID数据>例程会统计例程根目录数据库文件的表NEW,将满足条件的ID数目显示在编辑框中;
要点提示
在对数据库中的数据 进行统计操作时,得打开记录集,再使用其函数GetCollect()获取第一个字段,一般为关键字,再进行类型的转换,就可以统计出记录数据,具体的统计数目语句为"SELECT COUNT(*) FROM TableName where Condition”
实现功能
1.新建基于对话框的应用程序
2.在App类的InitInstance()函数中添加代码AfxOleInit();//初始化COM,创建ADO连接等操作
3.在stdafx.h中加入ADO支持库
#import “c:\program files\common files\system\ado\msado15.dll” no_namespace rename (“EOF”, “adoEOF”) 及#include "icrsint.h"//IADORecordBinding 头文件
4.主对话框中添加变量public:
_ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset;并初始化
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=test.mdb","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
//<>
CComboBox* pComboBox2 = (CComboBox*)GetDlgItem(IDC_COMBO2);
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
pComboBox->AddString("〈");
pComboBox->AddString("=");
pComboBox->AddString("〉");
pComboBox->SetCurSel(0);
try
{
_variant_t RecordsAffected;
m_pRecordset =m_pConnection->Execute("SELECT * FROM new",&RecordsAffected,adCmdText);
if(m_pRecordset->BOF)//else
{
AfxMessageBox("表内数据为空");
return FALSE;
}
m_pRecordset->MoveFirst();
CString str;
while(!m_pRecordset->adoEOF)
{
_variant_t vCount = m_pRecordset->GetCollect("ID");
str.Format("%d",vCount.lVal);
pComboBox2->AddString(str);//填充ID组合框
m_pRecordset->MoveNext();
}
m_pRecordset->MoveFirst();
pComboBox2->SetCurSel(0);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
5.按照例程界面,添加两组合框IDC_COMBO1,IDC_COMBO2,添加一编辑框IDC_EDIT1,添加按钮<统计满足下面ID数据> 关联点击函数
void CGkbc8Dlg::OnButton1()
{
CString sText,SQL,sCondition;
CComboBox* pComboBox1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO2);
pComboBox->GetWindowText(sText);
pComboBox1->GetWindowText(sCondition);
if(sCondition=="〈")
SQL.Format("SELECT COUNT(*) FROM new where ID < %s",sText);
if(sCondition=="=")
SQL.Format("SELECT COUNT(*) FROM new where ID = %s",sText);
if(sCondition=="〉")
SQL.Format("SELECT COUNT(*) FROM new where ID > %s",sText);
_variant_t RecordsAffected;
m_pRecordset =m_pConnection->Execute((_bstr_t)SQL,&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);//取得第一个字段的值放入vCount变量
m_pRecordset->Close();//关闭记录集
SetDlgItemInt(IDC_EDIT1,vCount.lVal);
}
我们来演示功能实现过程使用ADO实现记录集统计功能
|