工控编程吧
标题:
291上位机VC MFC使用ADO遍历记录集
[打印本页]
作者:
qq263946146
时间:
2016-9-25 23:30
标题:
291上位机VC MFC使用ADO遍历记录集
(, 下载次数: 0)
上传
点击文件名下载附件
ADO遍历记录集
功能展示
ADO编写数据库程序,最终的目的就是访问记录集中的数据,我们当前例程实现遍历数据库中指定记录集的全部内容,并显示在列表控件中,效果如图,在组合框中选择记录集后,点击<遍历>就可实现选中表的全部内容的读取与显示;
要点提示
VC中提供两种方法获取记录集的值,一是直接通过GetCollect(),或通过Recordset的Fields的GetItem(字段名)方法获取获取当前记录的variant类型的值,然后将其转换为我们想要的值;
二是通过映射将查询所返回的值同变量进行捆绑,以方便值的类型的转换 ;
遍历记录集用到的常用函数 有:
MoveFirst();
MoveLast();
MovePrevous();
MoveNext();
Move();
实现功能
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; _RecordsetPtr m_pRecordset;并初始化
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO);
pComboBox->InsertString(0,"Basic");
pComboBox->InsertString(0,"Course");
pComboBox->InsertString(0,"newtable");
pComboBox->SetCurSel(0);
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=STUDENTSINFO.MDB",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败!");
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
5.在主对话框添加组合框IDC_COMBO ,列表控件IDC_LIST ,再添加一<遍历>按钮,响应按钮的点击函数
void CGkbc8Dlg::OnDisplay()
{
CComboBox* pComboBox =(CComboBox*)GetDlgItem(IDC_COMBO);
CString sText;
pComboBox->GetLBText(pComboBox->GetCurSel(),sText);
if(sText=="Basic")
ViewBasic();
if(sText=="Course")
ViewCourse();
if(sText=="newtable")
ViewNewTable();
}
6.可以看到上面的函数调用了三个函数,这是我们自定义的函数
void CGkbc8Dlg::ViewBasic()
{
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
pListCtrl->DeleteAllItems();
for(int i=3;i>=0;i--)
pListCtrl->DeleteColumn(i);
pListCtrl->InsertColumn(0,"StuID",LVCFMT_CENTER,50);
pListCtrl->InsertColumn(1,"StuName",LVCFMT_CENTER,80);
pListCtrl->InsertColumn(2,"StuAdd",LVCFMT_CENTER,60);
pListCtrl->InsertColumn(3,"StuTel",LVCFMT_CENTER,50);
try
{
_variant_t RecordsAffected;
m_pRecordset =m_pConnection->Execute("SELECT * FROM Basic",&RecordsAffected,adCmdText);
if(m_pRecordset->BOF)//else
{
AfxMessageBox("表内数据为空");
return;
}
m_pRecordset->MoveFirst();
CString str1;
int nItem;
while(!m_pRecordset->adoEOF)
{
_variant_t vCount = m_pRecordset->GetCollect("StuID");
str1.Format("%d",vCount.lVal);
nItem=pListCtrl->InsertItem(0,str1);
vCount = m_pRecordset->GetCollect("StuName");
str1.Format("%d",vCount.lVal);
pListCtrl->SetItemText(nItem,1,str1);
vCount = m_pRecordset->GetCollect("StuAdd");
str1.Format("%d",vCount.lVal);
pListCtrl->SetItemText(nItem,2,str1);
vCount = m_pRecordset->GetCollect("StuTel");
str1.Format("%d",vCount.lVal);
pListCtrl->SetItemText(nItem,3,str1);
m_pRecordset->MoveNext();
}
m_pRecordset->MoveFirst();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/7ff139bb9fad2dc88e524dcb61f98335/0/0/w_19rstsyr0t.swf-albumId=6398347809-tvId=6398347809-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4