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

2959 人浏览 | 时间: 2016-05-26 16:26:51 | 作者: codexia

界面上list 控件只显示数据库表中的3个字段,想要点击一行,数据刷新到界面的Edit 控件上,由于list只有3个字段,所有要直接从数据库表中取值显示到Edit 上。

问题是 在加载数据库表中的时候,如何判断是点击了list  的哪一行来加载?

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】提供的代码和【阿郎】提供的点击确定行号的方法,仅供参考,实际以程序结果为准。
请微信扫码阅读
为防止恶意爬虫,
已开启反爬机制

相关阅读