#include "_recordset.h"
#include "field.h"
#include "fields.h"
/
#include "columns.h"
#include "column.h"
public:
C_Recordset *m_pSet;
C_Recordset m_Recordset;
CFields m_Fields;
CField m_Field;
///
//由CAdodc对象m_Ado调用类成员函数得到相应的记录集,然后赋给记录集对象
CAdodc &m_Ado=m_Cado;
CDataGrid &m_DataGrid=m_CDataGrid;
//CDataGrid m_CDataGrid;
m_Recordset = m_Ado.GetRecordset();
//调用成员函数定位到第一条记录
m_Recordset.MoveFirst();
//定义列集对象
CColumns m_Columns = m_DataGrid.GetColumns();
//声明列对象
CColumn m_Column;
//增加三列,因为在VC++中,DataGrid控件在设计阶段只提供两列进行设置,若有更多
//的列,则应在程序中实现,后续代码主要完成这个任务。
m_Columns.Add(2);
//m_Columns.Add(3);
//m_Columns.Add(4);
//获得第0列对象,然后设置其宽度,标题和绑定的字段
m_Column = m_Columns.GetItem(COleVariant(long()));
m_Column.SetWidth(50);
m_Column.SetCaption("学号");
m_Column.SetDataField("ID");
//获得第1列对象
m_Column = m_Columns.GetItem(COleVariant(long(1)));
m_Column.SetWidth(50);
m_Column.SetCaption("姓名");
m_Column.SetDataField("Name");
m_Column = m_Columns.GetItem(COleVariant(long(2)));
m_Column.SetWidth(20);
m_Column.SetCaption("年龄");
m_Column.SetDataField("Age");
//重新与数据表绑定,然后执行刷新操作
m_DataGrid.ReBind();
m_DataGrid.Refresh();
return TRUE; // return TRUE unless you set the focus to a control
}
///
void CTryADOControlDlg::OnBtnFindbyname()
{
CAdodc &m_Ado=m_Cado;
CDataGrid &m_DataGrid=m_CDataGrid;
///
COleVariant m_OleVariant;
//由记录对象调用成员函数得到当前记录的字段集,然后赋给字段集对象
m_Fields = m_Recordset.GetFields();
BOOL m_Found = false;
//设置一个布尔变量,m_nFound的作用是给出是否有该学生信息的判断条件
BOOL m_nFound = true;
//BOOL m_End = true;
m_Recordset.MoveFirst();
//while语句实现学生的查找,循环条件是还有到达记录集的末尾
while(!m_Recordset.GetEof()&&!m_Found)
{ //获得第2个字段对象(学生名称)
m_Field = m_Fields.GetItem(COleVariant(long(1)));
//获得该字段值
m_OleVariant = m_Field.GetValue();
//将控件的值传给变量
UpdateData(true);
//定义字符类对象,取值为用户输入的学生名称
CString m_Str = m_Edit;
//删除左右空白字符
m_Str.TrimLeft();
m_Str.TrimRight();
//将OLE变量值赋给字符串类对象
CString m_OleStr = m_OleVariant.bstrVal;
//删除左右空白字符
m_Str.TrimLeft();
m_Str.TrimRight();
//若两个字符串相等,则给出提示
if(m_OleStr == m_Str)
if(MessageBox("已经找到该学生信息,是否继续找同名学生?",
"提示!",MB_OKCANCEL)!=IDOK)
{ //若用户单击【取消】按钮,终止查找,否则继续查找下一个同名学生
//注意m_nFound值的设置
m_Found = true;
m_nFound = false;
break;
}
else
{ m_nFound = false; }
//查找下一条记录
m_Recordset.MoveNext();
}
//若m_nFound值为true,则给出没有该学生信息的提示
if(m_nFound)
MessageBox("没有该学生的信息?","提示!",MB_OK);
//若到达记录集的末尾,则重新定位到第一条记录
if(m_Recordset.GetEof())
m_Recordset.MoveFirst();
}
void CTryADOControlDlg::OnButtonFirst()
{
m_Recordset.MoveFirst(); //定位到第一条记录
}
void CTryADOControlDlg::OnButtonLast()
{
m_Recordset.MoveLast(); //定位到最后一条记录
}
void CTryADOControlDlg::OnButtonPre()
{
//若没有到达记录集开头,则移到前一条记录,此时若是记录集开头,则移到下一条记录
if(!m_Recordset.GetBof())
{ m_Recordset.MovePrevious();
if(m_Recordset.GetBof())
m_Recordset.MoveNext();
}
}
void CTryADOControlDlg::OnButtonNext()
{
// 若没有到达记录集末尾,则移到下一条记录,此时若是记录集末尾,则前移一条记录
if(!m_Recordset.GetEof())
{ m_Recordset.MoveNext();
if(m_Recordset.GetEof())
m_Recordset.MovePrevious();
}
}
ADO控件的使用
最新推荐文章于 2023-07-28 18:09:03 发布