DBEditEh控件里的简单计算工龄问题(20)

  • 主题发起人 主题发起人 lljimo
  • 开始时间 开始时间
L

lljimo

Unregistered / Unconfirmed
GUEST, unregistred user!
拖动2个控件DBEditEh1 和 DBEditEh2 在DBEditEh1中输入时间后,如输入时间为20050112后 ,DBEditEh2将自动计算出工龄 请问如何实现
 
在DBEditEh1的OnExit事件里写。
 
我当然知道是在DBEditEh1的OnExit事件里写,但不知道如何来实现
 
DateUtils单元有个YearsBetween函数,可以自动计算两个日期之间相差的年份。你不会问怎么用这个函数吧?
 
我在在DBEditEh1的OnExit事件里写如下代码procedure TFrmbase_rszl.DBEditEh1Exit(Sender: TObject); //计算工龄部分var TmpStr:string ;begin inherited; if not IsValidDate(TDBEditEh(Sender).Text) then begin MsgShow('无效的日期格式!'); TDBEditEh(Sender).SetFocus; end; if TDBEditEh(Sender).Text='' then Exit; if TDBEditEh(Sender).DataSource.State in [dsinsert,dsedit] then begin TmpStr:=TDBEditEh(Sender).Text ; with AdoQryrszl do begin FieldByName('gzgl').Value:= GetworkAgeInID(TmpStr); FieldByName('gzrq').Value:= DBEditEh1.Text ; end; end;end;在另一个单元如下function GetworkAgeInID(const ID:string):Integer ; //工龄计算var TmpStr:string ; iYear1,iMonth1,iDay1,iYear2,iMonth2,iDay2:Word ;begin try DecodeDate(StrToDate(Frmbase_rszl.DBEditEh1.Text),iYear1,iMonth1,iDay1); DecodeDate(Date,iYear2,iMonth2,iDay2); Result:=iYear2-iyear1; if (iMonth1 >iMonth2 ) then Dec(Result) else if (iMonth1=iMonth2)and(iDay1 >iDay2 ) then Dec(Result) except Result:=0; end;end;为什么我输入日期后,提示我输入的日期不是个有效日期呢,格式是20050312
 
2005-03-12 才是有效格式啊,这个也要问啊。
 
这个问题已经解决了,Tmpstr 的格式不正确
 
晕,就20分,还不肯结贴。GetworkAgeInID函数写的那么复杂,不如直接使用YearsBetween函数。YearsBetween( Frmbase_rszl.DBEditEh1.Field.AsDatetime, date);就可以了,写那么复杂!下次不回答你问题了。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部