起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: loworth

【结帖】表达式计算字段的统计**

[复制链接]
发表于 2008-6-27 09:25:09 | 显示全部楼层
你的代码是实现一个天数差对吧,你跟踪过你的代码吗?8楼错误是在执行哪段代码,你的实现的逻辑是否有问题,(我觉得有问题)
当 'ContinueDate' 字段为空,天数差为0
当'ContinueDate' 不为空,'PauseDate' 为空,是'PauseDate' 和当前服务器的时间差(这里错了吧,应该是'ContinueDate' 和当前服务器的时间差吧);'PauseDate' 为不为空,是'PauseDate' 和 当'ContinueDate'  时间差;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 09:52:05 | 显示全部楼层
更改后的代码如下
这下逻辑应该没错了


if DataSet.FieldByName('PauseDate').AsString<>'' then
        if DataSet.FieldByName('ContinueDate').AsString<>'' then
           DataSet.FieldByName('ZTTS').AsInteger:=DateUtils.DaysBetween(DataSet.FieldByName('PauseDate').AsDateTime,DataSet.FieldByName('ContinueDate').AsDateTime)
        else
           DataSet.FieldByName('ZTTS').AsInteger:=DateUtils.DaysBetween(DataSet.FieldByName('PauseDate').AsDateTime,SysSrv.SysService.Time)
     else
         DataSet.FieldByName('ZTTS').AsInteger:=0;

即先判断 暂停日期是pausedate否为空,为空则返回0
   否则 判断 继续日期continueDate是否为空,不为空 就返回 pausedate和continueDate的时间差
                                                          continuedate为空的话 就返回 pausedate和服务器日期的时间差
                                                                     

这样还是出现抓图的的错误
回复 支持 反对

使用道具 举报

发表于 2008-6-27 10:02:46 | 显示全部楼层
跟踪代码了么?错误停在哪个代码上?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 10:08:59 | 显示全部楼层
停在所贴代码的
if DataSet.FieldByName('PauseDate').AsString<>'' then 行
回复 支持 反对

使用道具 举报

发表于 2008-6-27 11:05:33 | 显示全部楼层
1、在13楼的代码外面增加一个判断,是实现把现有的记录给临时字段赋值
if DataSet.UpdatesPending = false then  
begin
if DataSet.FieldByName('PauseDate').AsString<>'' then
......
end;


2、再在数据集的OnFieldChange  事件,增加代码,实现当修改'PauseDate'或者'ContinueDate'这个字段时,填充'ZTTS' 这个字段,
参考代码  http://bbs.justep.com/forum.php?mod=viewthread&tid=1946



下面是我实现的代码,供参考
其中RQ是日期字段,LSZD1是临时字段
procedure TYWXX1.DataSetBZSJJ1CalcFields(DataSet: TDataSet);
begin
if DataSet.UpdatesPending = false then
  begin
  if DataSet.FieldByName('RQ').IsNull then
     DataSet.FieldByName('LSZD1').asstring := '0'
  else
     DataSet.FieldByName('LSZD1').asstring := '1';
  end;
end;

procedure TYWXX1.DataSetBZSJJ1FieldChange(DataSet: TDataSet; Field: TDataField);
begin
    if (Field <> nil) and ( Field.FieldName = 'RQ' ) then
    begin
    if  DataSetBZSJJ1.FieldByName('RQ').AsString <>'' then
     DataSetBZSJJ1.FieldByName('LSZD1').AsString := '1'
    else
     DataSetBZSJJ1.FieldByName('LSZD1').AsString := '0'
    end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 11:25:22 | 显示全部楼层
楼上你太帅了 佩服
解决
结贴
回复 支持 反对

使用道具 举报

发表于 2008-6-27 11:34:56 | 显示全部楼层
惭愧:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 16:23 , Processed in 0.051127 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表