菜鸟求助,有关NOTES的小问题(搜索,时间比较)

hhyxp 2003-12-31 02:46:12
请教各位:
1.如何搜索视图以前记录中的指定字段?我的想法是,表单在提交的时候,先搜索相应视图中的历史记录的相应字段,比如说是“会议室名”,如果以前的记录中该字段内容与当前要提交记录的内容相同,就给予提示,我查看了以前的帖子,说用getallDocumentByKey()的方法,我按照试了一下,但是不行,求各位给予详细一点的帮助说明。
2.如何比较时间?如我现在搜索记录,当前要提交的记录中的时间域输入内容不能同以前的记录中相应域的时间冲突,如何比较。
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaozhigood 2004-01-02
  • 打赏
  • 举报
回复
bug0303(补丁) 讲的很清楚啊!
要达到你需要的效果,只要做稍微的调整,具体如下:
‘前面相同
Dim dc As NotesDocumentCollection
Set dc = view.GetAllDocumentsByKey("会议室名", False)
Set doc = dc.getfirstdocument
If Not doc Is Nothing Then
Dim ndt1 As NotesDateTime
Dim ndt2 As NotesDateTime
Set ndt1 = New NotesDateTime( Cstr(doc.使用时间(0)))
Set ndt2 = New NotesDateTime(Source.FieldGetText("使用时间"))
If ndt2.TimeDifference( ndt1 ) = 0 Then
Msgbox "时间冲突!"
Continue = False
End If
Set doc= dc.GetNextDocument(doc)
End If

还要注意要在数据库中创建索引。
mimimaohan 2004-01-02
  • 打赏
  • 举报
回复
这个好像有点难度,帮你up!
hhyxp 2004-01-01
  • 打赏
  • 举报
回复
谢谢楼上 bug0303(补丁) ,我现在情况是这样的,我的视图结构为:

会议室名称 申请使用时间 申请人ID 申请时间
3A会议室 2004-01-01 12:00-13:00 abc 2004-01-01 8:00
1B会议室 2004-01-01 12:00-13:00 Bbc 2004-01-01 8:00
3A会议室 2004-01-01 13:00-14:00 Cbc 2004-01-01 8:00
3A会议室 2004-01-01 14:00-15:00 Dbc 2004-01-01 8:00
3A会议室 2004-01-01 14:00-16:00 Ebc 2004-01-01 8:00 *

最后一条记录如果要存储,必须先检查前边的记录中所有使用3A会议室的记录,然后再检查每条记录的申请使用时间,看是否冲突,如果不冲突,最后一条记录可以保存,否则不允许保存。上边例子中的最后一条记录要使用3A会议室,视图中已经有3条3A会议室的使用记录,所以必须检查3次。最后一条使用时间与倒数第二条冲突,所以不能保存,请问如何实现这样的功能?
merlling 2004-01-01
  • 打赏
  • 举报
回复
总算知道怎么回事了。靠目前的视图结构是应该解决不了你的问题的。需要专门做“资源预约”一类的数据库,很难一两句话说得清。
zrgt2001 2003-12-31
  • 打赏
  • 举报
回复
是getallentriesbykey()吧
bug0303 2003-12-31
  • 打赏
  • 举报
回复
1、创建视图View1,第一排序列为“会议室名”
2、在表单的Querysave事件中写程序
Dim se As New NotesSession
Dim db As NotesDatabase
Set db = se.CurrentDatabase
Dim view As NotesView
Set view = db.GetView("view1")
Dim doc As NotesDocument
Set doc = view.GetDocumentByKey(Source.FieldGetText("会议室名"))
If Not doc Is Nothing Then
Dim ndt1 As NotesDateTime
Dim ndt2 As NotesDateTime
Set ndt1 = New NotesDateTime( Cstr(doc.使用时间(0)))
Set ndt2 = New NotesDateTime(Source.FieldGetText("使用时间"))
If ndt2.TimeDifference( ndt1 ) = 0 Then
Msgbox "时间冲突!"
Continue = False
End If
End If

上述对时间的比较是精确到秒的。如果需要对时间段进行比较,或是精确到分钟、小时等情况,你就自己搞定吧。
hhyxp 2003-12-31
  • 打赏
  • 举报
回复
如果是这样的话,我的要求应该怎么实现啊?我要先看“会议室名”字段是否同以前的记录相同,如果相同,就再查看相应的“使用时间”域,看看时间是否冲突,这样应该怎么写代码啊?能否给我一段能实现我要求的代码参考一下,谢谢了。
bug0303 2003-12-31
  • 打赏
  • 举报
回复
1.getallDocumentByKey()方法绝对没有问题,使用时注意,只有对视图的第一排序列才能使用此方法(你就一定要将“会议室名”放在视图的第一列,而且一定要排序!)。其实,你的这个问题应该可以考虑用@dblookup来解决吧。
2.在公式中,两个时间型的变量,可以直接比较大小,而且是精确到秒的。在LS中最好还是使用NotesDateTime类,里面的TimeDifference方法可以搞定。

535

社区成员

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

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