更高效的通用查询方法

zpy_01 2005-03-22 11:57:14
因为文档少,所以采用了以下方法:
Function GetDocUnidByOneStrField(ViewName As String,FieldName As String,FieldVal As String) As String
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim TmpStr As Variant

Set session= New NotesSession
Set db = session.CurrentDatabase '(session、db是全局的,此处为示例代码)
Set view = db.GetView( ViewName )
GetDocUnidByOneField=""
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
TmpStr = doc.GetItemValue("""" & FieldName & """")(0)
If FieldVal =TmpStr Then
GetDocUnidByOneField=doc.UniversalID
Goto last
End If

Set doc = view.GetNextDocument(doc)
Wend
last:
Set view = Nothing
Set doc = Nothing
End Function

说明:符合域值条件的文档只取第一条

问题:
1:TmpStr返回为空,但对应文档中的数据是确实存在的。
2:效率低下,有没有更好的办法?不采用GetDocumentByKey原因是因为域太多,不可能每个都建索引。

谢谢!
...全文
104 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpy_01 2005-03-22
  • 打赏
  • 举报
回复
还有:
GetDocUnidByOneField=doc.UniversalID ---没有返回值
应该是:GetDocUnidByOneStrField=doc.UniversalID,和FUNCTION名称一致了。

这种方法毕竟效率底下呵呵
zpy_01 2005-03-22
  • 打赏
  • 举报
回复
谢谢老狼!
有没有更高效的办法?("""" & FieldName & """")只是一个引子:)
proer 2005-03-22
  • 打赏
  • 举报
回复
这句:TmpStr = doc.GetItemValue("""" & FieldName & """")(0)
语法错误。
应该是:
TmpStr = doc.GetItemValue(FieldName)
或者
如果域名不是参数,就直接用引号括起来,如下
TmpStr = doc.GetItemValue("FieldName")
zpy_01 2005-03-22
  • 打赏
  • 举报
回复
谢谢!
proer 2005-03-22
  • 打赏
  • 举报
回复
当然了,这样一个文档一个文档的查找肯定效率是很低的。建议还是要用GetDocumentByKey或者FTSearch,域多的话,可以选择关键的域做索引。

536

社区成员

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

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