MFC里连接数据库时用SQL语言碰到的日期的有关问题
MFC里连接数据库时用SQL语言碰到的日期的问题
我建了一个MFC工程,是关于一个仓库管理系统的,为了连接数据库中的一张表,我新建了一个类CInStorageSet类,然后关联了一个表InStorage,后面我用Open函数来连接数据库,碰到的关于日期方面的问题:
CInStorageSet InStorageSet;
InStorageSet.Open(CRecordset::dynaset, _T("Select * from InStorage Where datediff('d',IsTime,sz)=0 "),CRecordset::none);
主要是里面的sz这个东西出了问题,sz是我从一个编辑框中得到的一个变量:
char sz[100];
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_QUERYDAY),sz,100);
我本来想得是,如果要得到2012年8月1日的入库信息,就让用户在编辑框中输入2012-8-1,但是这样最后还是会出问题,我肯datediff中的sz出了问题!不过我不知道怎么解决,请问这个datediff的参数要怎么写?还是有什么别的办法?
------解决方案--------------------
直接=肯定是不行的,你得先用CString Format,
例如:
CString SQLQuery;
SQLQuery.Format("Select * from InStorage Where IsTime='%s'",sz);
这里候你可以先MessageBox(SQLQuery);看看SQL语句对不对
如果是:"Select * from InStorage Where IsTime='2012-08-21'" 这样,再去执行SQL语句
------解决方案--------------------
这个sz不就是存放用户输入的数据么,如果直接放到SQL语句里面,SQL语句是SQL服务器执行的,他只会当做是一个字符或一个字段,所以先在C++程序里面格式化(也就是相当于把用户输入的日期与SQL语句连接),就算不是查日期型数据,比如查询年龄在X周岁以上的人员:
假如用户在查询条件里面输入25,
定义一个变量 conditionAge 来存放条件;
conditionAge = atoi(XXX)//这里的XXX是存放eidt里面输入的值也就是用户输入的25
哪果SQL语句是这样"Select * from person where age = conditionAge",那SQL服务器执行时不会识别
conditionAge这个变量,只有先格式化
CString SQLstr;
SQLstr.Format("Select * from person where age =%d",conditionAge);
格式化后SQLstr字符串里面保存的数据就是这样:"Select * from person where age =25"
日期对比也是如此,只是日期在里面对比时,要加上单引号,在SQL里面单引号表示字符串。
我建了一个MFC工程,是关于一个仓库管理系统的,为了连接数据库中的一张表,我新建了一个类CInStorageSet类,然后关联了一个表InStorage,后面我用Open函数来连接数据库,碰到的关于日期方面的问题:
CInStorageSet InStorageSet;
InStorageSet.Open(CRecordset::dynaset, _T("Select * from InStorage Where datediff('d',IsTime,sz)=0 "),CRecordset::none);
主要是里面的sz这个东西出了问题,sz是我从一个编辑框中得到的一个变量:
char sz[100];
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_QUERYDAY),sz,100);
我本来想得是,如果要得到2012年8月1日的入库信息,就让用户在编辑框中输入2012-8-1,但是这样最后还是会出问题,我肯datediff中的sz出了问题!不过我不知道怎么解决,请问这个datediff的参数要怎么写?还是有什么别的办法?
------解决方案--------------------
直接=肯定是不行的,你得先用CString Format,
例如:
CString SQLQuery;
SQLQuery.Format("Select * from InStorage Where IsTime='%s'",sz);
这里候你可以先MessageBox(SQLQuery);看看SQL语句对不对
如果是:"Select * from InStorage Where IsTime='2012-08-21'" 这样,再去执行SQL语句
------解决方案--------------------
这个sz不就是存放用户输入的数据么,如果直接放到SQL语句里面,SQL语句是SQL服务器执行的,他只会当做是一个字符或一个字段,所以先在C++程序里面格式化(也就是相当于把用户输入的日期与SQL语句连接),就算不是查日期型数据,比如查询年龄在X周岁以上的人员:
假如用户在查询条件里面输入25,
定义一个变量 conditionAge 来存放条件;
conditionAge = atoi(XXX)//这里的XXX是存放eidt里面输入的值也就是用户输入的25
哪果SQL语句是这样"Select * from person where age = conditionAge",那SQL服务器执行时不会识别
conditionAge这个变量,只有先格式化
CString SQLstr;
SQLstr.Format("Select * from person where age =%d",conditionAge);
格式化后SQLstr字符串里面保存的数据就是这样:"Select * from person where age =25"
日期对比也是如此,只是日期在里面对比时,要加上单引号,在SQL里面单引号表示字符串。