Dim vc As NotesDocumentCollection Dim view As NotesView Set view = db.GetView("视图名") Dim formula As String '对nsf数据库中的文档的搜索主要有以下几种方式: formula = {Form = "mainform" & sys_SoftDelete != "1"} db.Search(formula,Nothing,0) formula = { FIELD Form Contains mainform and not Field sys_SoftDelete Contains "1"} vc.Ftsearch(formula, 0) vc = view.GetAllDocumentsByKey(SearchKey,true) vc = view.GetAllEntriesByKey(SearchKey ,True)
其中GetAllDocumentsByKey和GetAllEntriesByKey依赖于视图,GetAllDocumentsByKey搜索结果不保留视图的排序,GetAllEntriesByKey搜索结果保留视图的排序。
但实际应用中模糊搜索比按指定个数的关键字搜索更常用到,比如:列出一堆输入框,输入值非空时才算一个搜索条件,为空时忽略。但是db.Search和vc.Ftsearch的搜索结果都不能按指定n个域来排序,这让我灰常纠结
网上搜了下,有个方法说是把搜索结果放进一个已设计好排序的文件夹,然后再输出。这个方法倒是能有序输出,但文件夹要先建好,搜索一次并输出后不能删了文件夹,否则下一次运行LS代理就没有这个排好序的文件夹;但如果不删文件夹,搜索很多次以后,文件夹里的文档就越来越多了,就输出了不符合当前搜索条件的以前搜出来的文档,肿么办?
我现在灰常想写SQL语句select * from tablename order by 1 asc,2 desc,3 怎么破
有几种办法:
1. 同楼上用LS排序。
2. 利用NotesViewEntryCollection。仅Domino R8以上有效。
Dim vec As NotesViewEntryCollection set vec=view.AllEntries set vc=db.search(....) Call vec.Intersect(vc)
vec是保留视图排序的搜索结果。
3. 输出的结果做成表格用javascript排序,jquery有很多现成排序插件,可以把每一列都做成点击升序或降序的。不要这么说,毕竟每个系统都有其擅长的部分。如果你的database不需要full text index的话删掉database的index,然后用notesView.FTSearch,搜索结果和view的排序就一样了。