|
使用ADO对象检索数据
通过ADO记录集对象可以检索数据,在ADO记录集对象中有个Filter成员变量,该变量中存放着SQL语句中WHERE子句的条件字符串,查询时对记录集进行过滤,返回过滤后的结果。 例如,使用ADO对象检索数据,程序设计步骤如下: (1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“使用ADO对象检索数据”。 (2)向对话框中添加一个列表视图控件、两个静态文本控件、一个组合框控件、一个编辑框控件和一个按钮控件,并为控件关联变量。 (3)创建一个ADO类。 (4)在StdAfx.h导入ADO动态链接库,代码如下。 #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库 提示:我们在导入ADO动态链接库时,注意动态链接库msado15.dll的路径,它位于系统目录下,如果用户的系统安装在D盘,则msado15.dll位于D盘目录下。 (5)在对话框的OnInitDialog函数设置列表视图控件的扩展风格以及列标题,并向列表视图控件中插入数据,代码如下。 m_Grid.SetExtendedStyle(LVS_EX_FLATSB //扁平风格显示滚动条 |LVS_EX_FULLROWSELECT //允许整行选中 |LVS_EX_HEADERDRAGDROP //允许整列拖动 |LVS_EX_ONECLICKACTIVATE //单击选中项 |LVS_EX_GRIDLINES); //画出网格线 //设置列标题及列宽度 m_Grid.InsertColumn(0,"编号",LVCFMT_LEFT,130,0); m_Grid.InsertColumn(1,"姓名",LVCFMT_LEFT,130,1); m_Grid.InsertColumn(2,"学历",LVCFMT_LEFT,130,2); ADO m_Ado; //声明ADO类对象 m_Ado.OnInitADOConn(); //连接数据库 CString SQL = "select * from employees order by 编号 desc"; //设置查询字符串 m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL); //打开记录集 while(!m_Ado.m_pRecordset->adoEOF) //记录集不为空时循环 { m_Grid.InsertItem(0,""); //向列表视图控件中插入行 //向列表视图控件中插入列 m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("编号")); m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名")); m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("学历")); m_Ado.m_pRecordset->MoveNext(); //将记录集指针移动到下一条记录 } m_Ado.CloseRecordset(); //关闭记录集 m_Ado.CloseConn(); //断开数据库连接 m_Combo.SetCurSel(0); //设置组合框控件的选中项 (6)处理“检索”按钮的单击事件,在该事件中根据组合框和编辑框中的文本进行查询,将查询结果显示在列表中,代码如下。 void CSearchesDlg::OnButsearch() { UpdateData(TRUE); CString strField; //声明字符串变量 m_Combo.GetLBText(m_Combo.GetCurSel(),strField); //获得查询字段 if(strField.IsEmpty() || m_Text.IsEmpty()) //检索信息不能为空 { MessageBox("检索信息不能为空!"); //为空时弹出提示 return; } ADO m_Ado; //声明ADO类对象 m_Ado.OnInitADOConn(); //连接数据库 CString sql = "select * from employees"; //设置查询语句 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql); //打开记录集 CString str; //声明查询字符串 str.Format("%s = '%s'",strField,m_Text); //设置查询字符串 m_Ado.m_pRecordset->Filter = (_bstr_t)str; //进行查询 m_Ado.m_pRecordset->Requery(0); //用查询结果更新当前记录集 m_Grid.DeleteAllItems(); //删除列表视图中的数据 int i = 0; //声明整型变量 while(!m_Ado.m_pRecordset->adoEOF) //记录集不为空时循环 { m_Grid.InsertItem(i,""); //向列表视图控件中插入行 //向列表视图控件中插入列 m_Grid.SetItemText(i,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("编号")); m_Grid.SetItemText(i,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名")); m_Grid.SetItemText(i,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("学历")); m_Ado.m_pRecordset->MoveNext(); //将记录集指针移动到下一条记录 i++; //设置插入的行索引 } m_Ado.CloseRecordset(); //关闭记录集 m_Ado.CloseConn(); //断开数据库连接 } 实例的运行结果如图1所示。 ![]() 图1 使用ADO对象检索数据 |