294上位机VC MFC使用ADO实现整列数据相加偏移操作
ADO实现整列相加偏移操作
功能展示
ADO数据库程序中,有时需要同时修改整列的数据,为了增加数据的操作,可以对整列同时集体地进行操作,我们当前实例演示整列数据的求各,整列数据的增加与减少操作,效果如图,设置了岁数后点击<整死年龄增加>可以将数据表中年龄列全部数据偏移设置数,点击<整列年龄共>可以计算整列年龄的总和,并显示在编辑框中;
要点提示
1.行的添加我们当前例程是通过执行SQL语句来实现,当然还有其他 方法,如利用记录集对象的成员函数。具体方法步骤是调用AddNew()新增一空记录,调用PutCollect(字段名,值)输入每个字段的值;
调用Update()更新数据库数据;
2.在对记录集指针进行删除操作时,数据库数据被删除后,此记录为空记录,所以记住移动记录集数据指针到新的有效记录处;删除操作可以语句DELETE 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.主对话框中添加变量_ConnectionPtr m_pConnection;并初始化
HRESULT hr;
try
{
hr =m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("rovider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb",
"","",adModeUnknown);
///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为rovider=Microsoft.Jet.OLEDB.3.51;
}
}
// }
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
5.在主对话框添加二编辑框IDC_EDIT1,IDC_EDIT2, IDC_EDIT3再添加<整列年龄增加><整列年龄共><整列年龄减少>按钮,响应按钮的点击函数
void CGkbc8Dlg::OnDisplay1()
{
_variant_t RecordsAffected;
CString str;
int nOffset;
nOffset=GetDlgItemInt(IDC_EDIT1);
str.Format("UPDATE new SET Age =Age+%d",nOffset);
m_pConnection->Execute((_bstr_t)str,&RecordsAffected,adCmdText);
AfxMessageBox("增加成功!");
}
void CGkbc8Dlg::OnDisplay2()
{
_RecordsetPtr m_pRecordset;
_variant_t RecordsAffected;
m_pRecordset =m_pConnection->Execute("select SUM(Age) from new",&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);//取得第一个字段的值放入vCount变量
m_pRecordset->Close();//关闭记录集
m_pRecordset.Release();
SetDlgItemInt(IDC_EDIT2,(long)vCount);
}
void CGkbc8Dlg::OnDisplay3()
{
_variant_t RecordsAffected;
CString str;
int nOffset;
nOffset=GetDlgItemInt(IDC_EDIT3);
str.Format("UPDATE new SET Age =Age-%d",nOffset);
m_pConnection->Execute((_bstr_t)str,&RecordsAffected,adCmdText);
AfxMessageBox("减少成功!");
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|