在对应的.h头文件中,定义每个消息的处理函数:
// Generated message map functions
//{{AFX_MSG(CTestAdoDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnConnect();
afx_msg void OnSelchangeList1();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在.cpp文件中,定义消息函数的实现 和 与控件对应的消息图
消息对应图:
BEGIN_MESSAGE_MAP(CTestAdoDlg, CDialog)
//{{AFX_MSG_MAP(CTestAdoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Connect, OnConnect)
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
IDC_LIST1 为窗体上的控件
消息函数的实现:
void CTestAdoDlg::OnConnect()
{
// m_list.AddString("1");
_variant_t var;
CString strName,strAge;
// 清空列表框
m_list.ResetContent();
strName=strAge="";
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Pw");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_list.AddString( strName + " --> "+strAge );
m_pRecordset->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
m_list.SetCurSel(0);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}