在代理中日期如何比较?急!!!

whflzy 2003-09-29 05:13:47
我写了一个代理,统计一段日期之间某个部门用的经费总数,代码如下:
Dim s As New notessession
Dim doc,doc1 As notesdocument
Dim view As notesview
Dim db As notesdatabase

sum=0
Set db=s.currentdatabase
Set view=db.getview("FinanceByDate")
Set doc=s.documentcontext
Set doc1=view.getfirstdocument()
While doc1 Is Nothing
If Trim(doc.Department(0))=doc1.Department(0) Then
If (doc1.EnterTime(0)>=doc.FromDate(0) And doc1.EnterTime(0) <=doc.EndDate(0)) Then
sum=sum+doc1.MoneySum(0)
End If
End If
Set doc1=view.getnextdocument(doc1)
Wend
明明在中间有记录的,可是统计出来sum却为0。不知道是哪里错了,是不是日期的比较错了,请高手指教!
...全文
33 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
whflzy 2003-11-05
  • 打赏
  • 举报
回复
在比较时先要转换成日期的格式。虽然域是日期类型的,可还是要转换成日期类型的才可以。
poptpeter 2003-09-30
  • 打赏
  • 举报
回复
你可以用doc1中的其他域做一下测试啊,比如
print doc1.From(0),确定循环取文档没有问题,并且日期比较之后取的文档也没有问题,之后再看数字相加问题,一步一步试。

我给你一个我写的含日期比较的搜索公式,希望能有用。


记录活动的文档中包含以下日期时间域:
活动开始日期:date1 ---- 活动结束日期:date2

搜索表单提供相同的两个日期时间域:date1,date2,要搜索在这两个日期范围内的活动文档

strSearch = "Form='form1')&date2>=@Date([" & doc.date1(0) & "])&date1<=@Date([" & doc.date2(0) & "])"
set datetime = New NotesDateTime("01/01/2000")
set dc = db.Search(strSearch,datetime,0)

doc是搜索用上下文,只要活动日期范围与搜索日期范围有交集,就纳入搜索结果。
ibm123 2003-09-30
  • 打赏
  • 举报
回复
调试一下程序,MSGBOX或PRINT一下doc1.EnterTime(0)、doc.FromDate(0)、doc.EndDate(0)的值,另外MoneySum域是否为数字域,不管数字还是文本,将代码修改为:sum=sum+val(doc1.MoneySum(0))试试。
whflzy 2003-09-30
  • 打赏
  • 举报
回复
IBM123(Boy) :循环改正了,也不行。
chenyg2000(icerain) :能用db.search给我写一段代码吗?
achan8021 2003-09-30
  • 打赏
  • 举报
回复
你也可以采用查询的方式,不如db.Search(SearchString,0)
查询条件可以写成如下:
SearchString = "Form = ""FormName"""
SearchString = SearchString + "& EnterTime >=" + "[" + doc.FromDate(0) + "]"
SearchString = SearchString + "& EnterTime <=" + "[" + doc.EndDate(0)) + "]"
set dc = db.Search(SearchString,0)
dc.Count就是查询结果的文档个数
dc是查询结果文档集
Amanged 2003-09-30
  • 打赏
  • 举报
回复
记住,日期不能直接比较,你可以附值给变量,再比较,旧可以了。。
ibm123 2003-09-29
  • 打赏
  • 举报
回复
错了………… 循环语句错了。

While not (doc1 Is Nothing )
If Trim(doc.Department(0))=doc1.Department(0) Then
If (doc1.EnterTime(0)>=doc.FromDate(0) And doc1.EnterTime(0) <=doc.EndDate(0)) Then
sum=sum+doc1.MoneySum(0)
End If
End If
Set doc1=view.getnextdocument(doc1)
Wend
chenyg2000 2003-09-29
  • 打赏
  • 举报
回复
不如使用db.search来做了
davidnim 2003-09-29
  • 打赏
  • 举报
回复
1,域MoneySum是不是数字型?
2,如果怀疑日期问题,则将IF语句注释掉,调试。如果是日期问题,可以通过Format函数先转换一下,例如:Format$(doc1.EnterTime(0),"yyyy-mm-dd")
再作比较
d_red 2003-09-29
  • 打赏
  • 举报
回复
就是日期比较的原因,不能这么直接比较的
使用notesdatetime的TimeDifference方法来进行日期比较,取的两个日期差值,判断是在截止日期前还是后

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧