searchFormula$ = {Form = "formname" & starttime>"开始时间" & endtime<"结束时间"}
 
 Set collection = db.Search(searchFormula$, dateTime,0)
 
 Set doc=collection.getfirstdocument
 
 While Not(doc Is Nothing)
  print '打印文档
  Set doc = collection.GetNextDocument(doc)
 Wend




呵呵,其实做完了以后才发现这个东东很好用也很简单,只怪自己理解不透。。。 
经过那么多曲折以后,有了一些感概,供和我一样的新手参考:) 
1、search及ftsearch里的查询条件均为字符串,它是不能再在里面进行其它计算的 
所以 
set collection=db.ftsearch([date1] > doc.date2(0),0) 
这样是得不到正确结果的 
最好的办法就是设一字符串集中所有的条件,安全简便 
search=[date1] > +doc.date2(0)+…… 
set collection=db.ftsearch(search,0) 
2、也是别人告诉我的,field和[]只要用一个就可以了 
3、在所有的运算符两边加空格,虽然notes并没有强调,但你会发现这样能避免一些出错的可能。 




LotusScript方法
Lotus测试来确定在获得一组文档方面,谁是表现最好的最常使用的LotusScript 方法-实际上在LotusScrip任何部分程序代码中最常运行的任务。在这一小节,我们比较以下常用的LotusScript方法:

  • db.FTSearch
  • db.Search
  • view.GetAllDocumentsByKey
  • view.GetDocumentByKey

在这类测试过程中,使用不同大小的数据库(10,000、100,000和1,000,000份文档)来了解每种方法是如何很好地运行的。

db.FTSearch方法
在对数据库的全文检索后,db.FTSearch返回文档集合。它运行良好,但需要当前的全文索引,也许对语法更深入的了解。此外,根据服务器的Notes.ini 设置,对返回的文件集合的大小施加了限制。当然,如果您的查找是基于多文本字段的内容,那么这是您唯一切实可行的选择。

db.Search方法
在使用视图选择公式进行数据库查找之后,db.Search返回文档集合。对于大数据库中的小规模集合来说这是相对低效率的执行程序。例如, 如果您的数据库中有100,000份文档并且您只需查找5或10份文档,您可能希望避免使用db.Search。在另一方面,它不需要全文索引和预先创建的视图,因此它是一种非常方便的查询方法。例如,如果您对几乎不能控制的数据库进行查询,这可能是您唯一可靠的选择。

view.GetAllDocumentsByKey方法
从Release 5开始,这种方法成为检索文件集合最快的方式。唯一的缺点是需要建立相关的视图。但是,只要您精简了您的视图设计和不使用昂贵的时间/日期敏感的公式(正如第一部分所讨论),这些视图对性能和磁盘空间的影响应可以降低以最小,程序使用view.GetAllDocumentsByKey从这些视图获得文件集合的速度将非常迅速。

通常,当遍历使用任何这些方法检索到的大量文件时,您的程序应使用

set doc = DocumentCollection.GetNextDocument ( doc )

而不是
set doc = DocumentCollection.GetNthDocument ( i )

其中i从1增加到DocumentCollection.count。 对于文档小集合来说-和对于单独运行的程序来说,如预定的代理-性能下降为最小,但对于文档大集合来说-或者许多用户同时运行的程序来说会影响性能,它使GetNth成为不明智的选择。GetNth方法通常适用于您想要从集合中挑选文档的情形,而不是简单地遍历整个集合。

view.GetDocumentByKey方法
这是唯一一种不将一组文档保存到内存中的方法。view.GetDocumentByKey而是使用已经构建的视图索引作为其集合并且一次只把一份文档放到视图中。这种方法与view.AutoUpdate = False一同使用,它非常迅速且不需要内存来保存可能的大文件集合。

:如果前一份文档已经从视图中删除,当有机会访问视图中的下一文档时,view.AutoUpdate = False主要用于避免错误信息,但它还可以显著提升性能以便运行代理。当更改文档中的数据时,使用view.AutoUpdate = False您会看到视图中有显著的改进。

事件、共享的要素和其它
以下是必须记住的一些编程注意事项:

  • 注意表单中事件的数量,不要"overcode"

    当删除程序时,注意完全删除它。不要只是重新标记它为删除,或者部分删除程序。您可以根据circle/squiggle是填满还是清空来告诉事件是否有程序代码。

  • 共享的要素是低效率的执行程序,但是它们可以在多个位置使用,从而弥补了其糟糕的性能。

    使用共享的元素来保存某些工作以及重复一个要素来提升性能时仔细考虑。

  • 如果您实施了错误检测,确保当遇到错误时检测停止。

    在精心编程的情形下,通过当它逻辑上应结束时使其继续运行,这可以确保您的程序不会"漏掉"。

  • 大规模的子表单是低效率的执行程序。

    大规模的子表单会影响应用程序的性能。如果您在应用程序中未多次使用大规模的子表单,考虑在每个表单中重复这类字段,而不是使用子表单。

  • 使用较少的字段。

    在文档中使用较少的字段与性能相关,而不是文档的大小。使用具有较多数据的较少字段,如多值字段,而不是使用较少数据的比较多的字段可以提升应用程序的性能。由于许多传统的编程人员对Notes/Domino应用程序开发不熟悉,这可能一些概念直观,但实际测试很明显地验证了这一概念。

  • 使用view.Autoupdate=False 来阻止视图刷新。

    正如前面介绍,同时使用view.GetDocumentByKey方法和这一属性可以是高效率的执行程序。

  • 使用StampAll方法来立即修改大量文档。

    当您需要使用静态值来标记大量文档时这种方法极其有效,如当前日期/时间或值的标记集。

  • ForAll 语句是遍历循环的最快方法。
  • 固定数组是比动态数组更卓越的执行性能。

    动态数组是比固定数组稍微低效率的执行性能,但动态数组的规模恰如其分,在您选择固定还是动态数组之前请预以权衡。