| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1323 人关注过本帖
标题:实在走投无路了,来请教各路大神怎么利用VFP实现生日提醒功能
只看楼主 加入收藏
jsbsj
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-3-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
实在走投无路了,来请教各路大神怎么利用VFP实现生日提醒功能
本人最近自学VFP想给店里做一个管理系统,到了顾客生日的前一个月就可以提醒。建了一个表   客户 其中字段  生日(字,10),输入形式是19880103
set Date YMD &&把日期设置为年月日格式
x=date() &&把当前日期赋给x
Start=Right(Dtos(x),4)   &&截取月日的部分赋给start
End=Right(Dtos(Gomonth(x,1)),4)  &&给end 赋值,其中gomonth函数是返回当前日期之后一个月的日期。
y1=Left(Dtos(x),4)        &&截取当前日期的年份赋给 y1
y2=Left(Dtos(Gomonth(x,1)),4)     &&截取当前日期过一个月的日期的年份赋给y2
If(y1=y2)        &&判断是否在同一年,考虑到年末的情况
Select 姓名,生日 From 客户 Where Between(Right(Dtos(生日),4),Start,End)  &&从客户表中选取姓名,生日两个字段,要求满足生日在start和end之间
Else
Select 姓名,生日 From 客户 Where Between(Right(Dtos(生日),4),Start,"1231") Or Between(Right(Dtos(生日),4),"0101",End)  &&年末的情况
Endif
这个代码好像也没法实现生日提前一个月提醒,不知道各位有没有更好的实现方法,或者我的方法到底出错在哪,俺先谢谢大家了

[ 本帖最后由 jsbsj 于 2011-4-1 13:49 编辑 ]
搜索更多相关主题的帖子: 年月日 
2011-03-31 23:14
jsbsj
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-3-31
收藏
得分:0 
没人回答,大家帮帮忙啊
2011-04-01 09:57
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
建议给点必要的注释,否则人家容易误解你的思路。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-04-01 13:27
jsbsj
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-3-31
收藏
得分:0 
回复 3楼 hu9jj
本人最近自学VFP想给店里做一个管理系统,到了顾客生日的前一个月就可以提醒。建了一个表   客户 其中字段  生日(字,10),输入形式是19880103
set Date YMD &&把日期设置为年月日格式
x=date() &&把当前日期赋给x
Start=Right(Dtos(x),4)   &&截取月日的部分赋给start
End=Right(Dtos(Gomonth(x,1)),4)  &&给end 赋值,其中gomonth函数是返回当前日期之后一个月的日期。
y1=Left(Dtos(x),4)        &&截取当前日期的年份赋给 y1
y2=Left(Dtos(Gomonth(x,1)),4)     &&截取当前日期过一个月的日期的年份赋给y2
If(y1=y2)        &&判断是否在同一年,考虑到年末的情况
Select 姓名,生日 From 客户 Where Between(Right(Dtos(生日),4),Start,End)  &&从客户表中选取姓名,生日两个字段,要求满足生日在start和end之间
Else
Select 姓名,生日 From 客户 Where Between(Right(Dtos(生日),4),Start,"1231") Or Between(Right(Dtos(生日),4),"0101",End)  &&年末的情况
Endif
这个代码好像也没法实现生日提前一个月提醒,不知道各位有没有更好的实现方法,或者我的方法到底出错在哪,俺先谢谢大家了
2011-04-01 13:49
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
提个建议,不一定很符合要求,只作参考吧。
1、是否在你的客户表内,增加一个字段 "今年生日",日期型.让它每年自动更新一次。
2、使用相差天数提前报警。比如:提前 40 天报警时,ndd=40
3、查询: select * from 客户表 where (今年生日-date())<=ndd and (今年生日-date())>=0
   (对于今年年底预报明年上半年生日,需要根据预报的天数,更新'今年生日'字段内的某些记录
     或者生日已过的人员,他的‘今年生日’立刻变成明年的生日记录)

[ 本帖最后由 qingfameng 于 2011-4-1 15:46 编辑 ]
2011-04-01 15:13
jsbsj
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-3-31
收藏
得分:0 
回复 5楼 qingfameng
今年生日是通过year函数提取今年的年份再加上生日的月份和日子么??我的那个生日用的是字符型的,是今年生日=ctod("str(year(date()),4,0)"+“right(生日,4)”)还是怎么实现?没什么思路,能说的再详细点么
2011-04-01 18:11
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:10 
用当前的年份和顾客的出生月、日组成顾客生日的日期,然后与当前的日期相减,差额为0即当天生日,差额为负数即已经过了生日,差额为正数则表明还有多少天过生日。
如:
生日天数=date(year(data(),val(susb(alltr(生日),5,2),val(susb(alltr(生日),7,2)))-date()
if 生日天数<0
    ?"该顾客今年已经过了生日。"
else
    if 生日天数=0
        ?"该顾客今天过生日。"
    else
        ?"该顾客还有"+alltr(str(生日天数))+"天过生日。"
    endif
endif

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-04-02 08:53
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:10 
7楼版主提示正确。再给1楼主
ttt.rar (2.43 KB)
一个例子作参考吧。希望有所帮助。
2011-04-02 18:06
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
这就是字段类型定义与实际使用不符的典型!连生日都不用日期型,真是典范啊!
您把顾客生日定为日期型,每次启动程序的时候就用这个字段和系统日期比较(设定一定有提前量),不就OK了吗!!!

两人行已有我师……
2011-04-02 18:50
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
用字符字段储存生日还容易出现非法日期的问题。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-04-03 10:17
快速回复:实在走投无路了,来请教各路大神怎么利用VFP实现生日提醒功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022869 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved