在MS ACCESS中,是否可以这样做:DoCmd.OpenForm“Dlookup ....”?

时间:2015-03-20 01:11:59

标签: vba ms-access access-vba

MS Access 2013 我有一个包含以下数据的tblUser表(UserName / Password / StartForm) 我有一个登录系统,用户在其中放入名为txtLogin的用户名表单字段。

在UserName和Password匹配后,我需要为每个用户打开一个特定的表单(取决于他在公司中的功能)。 我有这个代码,但无法弄清楚问题。

DoCmd.OpenForm DLookup("StartForm", "tblUser","[UserName]='" & txtLogin & "';")

我只是开始编程而且我想学习,而不是复制/粘贴代码,所以如果你能给我一个简单的解释,我非常感激。

谢谢

2 个答案:

答案 0 :(得分:3)

DoCmd.OpenForm的第一个参数是表单名称。要将表单打开到特定参数,您需要使用 第四个参数是WhereCondition

此处不需要Dlookup功能。它用于从单个记录返回单个列,其中sourced列是第一个参数,源表是第二个参数。它知道搜索条件抓取的记录,即第三个参数。

您进行此设置的方式是要求DoCmd.OpenForm[the result of your DLookup call]的名称打开一个没有应用过滤器的表单。

你想要的更像是

DoCmd.OpenForm NameOfYourUserForm, acNormal, , "[UserName]='" & txtLogin & "'"

答案 1 :(得分:1)

我能够解决问题如下。 我为我想调用的表单(nomeForm)创建了一个变量,并使用Dlookup为每个用户找到合适的表单。

谢谢

Private Sub cmdLogin_Click()

     Dim rst As Recordset
     Dim nomeUsuario As String

    If IsNull(txtLogin) Or IsNull(txtSenha) Then
    MsgBox "Preencha o login e senha"
    Exit Sub
    End If

    nomeUsuario = txtLogin

    Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblUser WHERE UserName = '" & txtLogin & "' AND Password = '" & txtSenha & "';")

    If rst.RecordCount = 1 Then

    bcansafelyclose = True
    DoCmd.Close

    Dim nomeForm As String
    nomeForm = DLookup("Start", "tblUser", "UserName = '" & nomeUsuario & "'")

    DoCmd.OpenForm nomeForm

    Else

    MsgBox "Login ou senha incorretos"
    bcansafelyclose = False

    End If

    rst.Close

    End Sub