所以,这是我的代码。它只获得第一个文件。但我想要做的是阅读一份特定的文件。视图是用户名和密码的集合。因此,例如:用户名在第5个文档中,然后程序将扫描视图,直到找到正确的文档。对不起,我的解释很糟糕。我希望你能理解我的问题。
On Error Goto e
Dim db As NotesDatabase
Dim view As NotesView
Dim results As Variant
Dim cmd As String
Dim d As NotesDocument, flag As Integer, upw As String, uname As String
Set db = source.Database
uname = Inputbox("Enter Username")
Set view = db.GetView("Registration View")
Set d = view.GetFirstDocument()
'cmd = {@DbLookup("";"48257E00:00089AF5";"RegView";1)}
'results = Evaluate(cmd)
Dim pw As String, un As String
'Forall Username In results
' Msgbox username(1)
'End Forall
If Not d Is Nothing Then
un = d.userfield(0)
pw = d.passfield(0)
If un <> uname Then
Msgbox "Username invalid!"
End If
If un = uname Then
upw = Inputbox("Enter Password")
If pw <> upw Then
Msgbox "Password invalid!"
End If
If pw = upw Then
Msgbox "Log In succesful!"
flag = 1
End If
End If
End If
If flag <> 1 Then Call source.Close()
Exit Sub
e:
Print Error, Erl
答案 0 :(得分:3)
您应该使用view.getDocumentByKey(uname,true)而不是使用view.getFirstDocument,该视图在视图的第一列中使用键uname返回文档
确保视图中的第一列设置为已排序
如果没有找到使用该密钥的文件,则getDocumentByKey不返回任何内容
答案 1 :(得分:0)
您可以使用第一列userfield和第二列passfield创建视图。必须对第一列进行排序。
在你的代码中构建一个uname和upw
的数组Dim strSearch (0 to 1) as String
Dim viewSearch as NotesView
Dim doc as NotesDocument
viewSearch = db.getView("YourSearchView")
strSearch(0) = uname
strSearch(1) = upw
Set doc = db.getDocumentByKey(strSearch, true)
If(Not doc is nothing)Then
Print "Login successfull"
Else
Print "Wrong username or password"
End if
如果您想使用用户名和密码的两步检查,您可以创建两个搜索视图,并使用第一个检查用户名是否存在,第二个用于检查给定的用户名和密码。
答案 2 :(得分:0)
当然,您可以循环浏览完整视图并比较每个条目,但这将非常慢。在您的代码中,缺少完整的“循环”。您需要使用do-while循环来遍历视图中的所有条目:
Set d = view.GetFirstDocument()
Do
un = d.userfield(0)
pw = d.passfield(0)
'- here comes the rest of your code, if password is right - exit
If flag = 1 then exitLoop = True
Set d = view.GetNextDocument( d )
if d is Nothing then exitLoop = True
Loop until exitLoop
但这是非常低效的。如果您的视图是按用户名排序(如果没有,请创建一个),然后按照Thomas的建议使用getDocumentbyKey。
Set d = view.GetDocumentByKey( uname )
If not d is Nothing then
un = d.userfield
问题是为什么人们会这样做:Notes / Domino有一个很好的安全概念并在视图中保存所有用户名和密码,每个人都可以通过检查文档属性来简单地读取密码 - 可以说 - 愚蠢,并没有给你一点安全......