更新时间:2016-05-26 16:26:51浏览次数:1+次
界面上list 控件只显示数据库表中的3个字段,想要点击一行,数据刷新到界面的Edit 控件上,由于list只有3个字段,所有要直接从数据库表中取值显示到Edit 上。
问题是 在加载数据库表中的时候,如何判断是点击了list 的哪一行来加载?
void CSubjectDlg::OnNMClickListObject(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
POSITION pos = m_listObject.GetFirstSelectedItemPosition();
UINT nSel = m_listObject.GetNextSelectedItem(pos);//第 n 行 第0~N 列
m_szNumb = m_listObject.GetItemText(nSel, 0);
m_szChina = m_listObject.GetItemText(nSel, 1);
m_szEnglish = m_listObject.GetItemText(nSel, 2);
UpdateData(FALSE); // 内存到界面
if (!m_ado.Select(_T("SELECT * FROM t_item ")))
return;
CString str;
while (!m_ado.IsEOF()) //数据库到 界面中
{
// m_ado.Select(_T("SELECT * FROM t_item where f_ID =(‘nSel +1’)")); //这样写 不对
m_ado.GetFieldByIndex(9, str); //第一孵育
SetDlgItemText(IDC_BREED1, str);
m_ado.GetFieldByIndex(10, str); //第二孵育
SetDlgItemText(IDC_BREED2, str);
m_ado.GetFieldByIndex(11, str); //读数
SetDlgItemText(IDC_INTERAL, str);
m_ado.MoveNext();
}
*pResult = 0;
}
CString strSQL;//创建SQL语句字符串变量
strSQL.Format("SELECT * FROM t_item where f_ID = %d", nSel+1);//格式化拼接一个SQL语句
m_ado.Select(strSQL);//将SQL语句传入执行
所以,关键问题就在于字符串操作不熟练,多多练习。
开发中,为了拼接SQL语句的灵活,会根据各种条件拼接各种查询条件,而最开始的语句是这样的:
CString strSQL=_T("select * from user");
然后第一次根据条件判断,比如是否要添加年龄条件查询,如果需要则拼成这样的:
CString strAge = " age > 12";
strSQL.Format(_T("%s where %s"),strSQL,strAge);
这样一个strSQL的值为:"select * from user where age > 12"。这个足以说明拼接SQL语句的灵活性。至于其他的代码,就不做分析了。
感谢【wujunwei】提供的代码和【阿郎】提供的点击确定行号的方法,仅供参考,实际以程序结果为准。
相关资讯