今天帮同学修改一个权限验证,首先需要验证身份是否合法,再次验证时间是否合法,该系统是一个门禁系统的模拟。
环境为 pb + sql server ,对于身份的验证那么就照一般的做法,向数据库查询是否存在 用户名=:用户名 密码=:密码的记录就可以了。但是对于时间的验证,就发生了一些小小的麻烦。
数据库中存在表 settime(begintime,endtime) ,由于我是去修改他的代码,原来他写的是
int rows = 0
datetime checktime = today()
select count(*)
into :rows
from settime
where :checktime between begintime and endtime;
我看这上面的代码,他说有错误,的确有错,因为between后面的两个应该是具体的值吧,而不是仅仅是数据库表中的字段,所以顺着这个思路,那么我就想到用个双重循环,先将settime表中的每个记录读取出来,再一个一个的比较,如果能够找到符合条件的话那么就处理其他逻辑。后来又考虑到自己对游标取记录一个一个的取好像做不出来,就又考虑怎么将数据库表中的记录放到某个数据结构中如数组啊什么的,然后再来和当前取得的时间 checktime 作一个比较,但其实这个和前面的考虑没有多少区别。
如此试验了近1个小时吧,然后有事情就离开了。
后来突然想到,作为 between and 结构,其中已知的参数应该是between前面的那个值,而后面两个应该是数据库表中的字段,我跟着原来的思路也没有考虑到这么一点,,于是就不能获得正确的解答。后来使用了 checktime > begintime and checktime <endtime 问题得到解决。
这个是再实际做东西的时候得到的教训,所以以后写sql的时候需要提醒自己,什么是已知,什么是未知。
转载于:https://www.cnblogs.com/canpigfly/archive/2005/05/10/152396.html