当前位置:C++技术网 > 资讯 > MFC 操作数据库问题 如何条件判断

MFC 操作数据库问题 如何条件判断

更新时间: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;
}

C++技术网解答

    这个问题是比较简单的,问题就出在经验不足。m_ado.Select(参数),参数是一个字符串,字符串里的内容都是字符,不会当做变量,所以自然就无法起到变量的作用。     在数据库编程中,经常用到的就是格式化SQL语句。SQL语句以字符串形式传入,不过SQL语句的形成可以以各种形式拼接,根据不同的条件完成拼接,从而实现不同的条件执行不同的语句的目的。     本例中,就是根据选择的行号来组合成一个SQL语句。因为索引变量是整型,所以不能直接和字符串拼接,就需要使用字符串格式化方式拼接。在C语言中使用sprintf拼接到字符数组中,在C++语言中,可以参考《C++如何格式化字符串,超简单实现C++格式化字符串功能》。而在MFC中,我们可以利用强大的CString来完成,CString类的Format函数使用和printf差不多,非常方便。代码如下:

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】提供的代码和【阿郎】提供的点击确定行号的方法,仅供参考,实际以程序结果为准。