? ? 一、使用datetimepicker获取时间
?? ?CTime tm;
?? ?m_Ktime.GetTime(tm);
?? ?CString strTime = tm.Format("%Y-%m-%d");
二、连接数据库
//连接数据库
MYSQL mysqlConOper;
mysql_init(&mysqlConOper);
const char user[] = "root";
const char pswd[] = "123456";
const char host[] = "localhost";
const char table[] = "admins";
unsigned int port = 3306;
mysql_real_connect(&mysqlConOper, host, user, pswd, table, port, NULL, 0);
mysql_query(&mysqlConOper, "SET USER GBK");
mysql_query(&mysqlConOper, "SET NAMES GBK"); //设置编码格式,否则在cmd下无法显示中文
三、根据 strTime 用 mysql_query 来查询数据库
MYSQL_RES* res; //声明数据查询结果
MYSQL_ROW row; //取每行结果的对象
char sele[1000];
sprintf_s(sele, "select * from dailysettle where timestamp(left(dateAtime,10)) = \'%s\'", strTime);
mysql_query(&mysqlConOper, sele); //向数据库发送查询语句
res = mysql_store_result(&mysqlConOper); //得到查询结果
if (NULL == res) { return; } //如果为空则返回
CString str;
int i = 0;
while (row = mysql_fetch_row(res)) //逐行去除查询结果并操作
{
//数据操作,这里可以直接以row[i]的形式取出数据项,但是均为char*行
CString myreaddata(row[0]);
//for (int i = 0; i < 2; i++) {
str.Format("%s", row[0]);
m_dayAna.InsertItem(i, str);
str.Format("%s", row[1]);
m_dayAna.SetItemText(i, 1, str);
str.Format("%s", row[2]);
m_dayAna.SetItemText(i, 2, str);
str.Format("%s", row[3]);
m_dayAna.SetItemText(i, 3, str);
i++;
}
mysql_free_result(res); //释放结果集所占用的内存
mysql_close(&mysqlConOper); //关闭数据库
}
四、给date time picker添加修改日期的响应消息函数
添加代码如下:?
void CAlculate::OnDtnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) //在控件的时间发生改变时响应消息函数
{
LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_dayAna.DeleteAllItems(); //清空列表
//清空当日销售收入的数据
m_revenue.SetSel(0, -1);
m_revenue.Clear(); //清空数据
m_revenue.GetFocus(); //再次获得焦点
*pResult = 0;
}
添加上述代码后,就不出现下列情况:
比如选了3月20日的数据,再选择3月18日就会同时出现18号和20号的数据。
?效果图如下:
?
五、注释
1、select * from dailysettle where timestamp(left(dateAtime,10)) =? "2022-03-20";
left(s1, s2):截取dateAtime长度为10的字段
2、使用的是用listcontrol来显示查询数据库所得的数据。
|