对复选框记录源使用查询是/否字段?

时间:2013-11-06 12:37:05

标签: sql vba ms-access checkbox

首先,您从名为LoginF的表单开始。一旦您选择了登录ID和密码;并登录它从表LoginIntoT获取您选择的登录ID的数据,并使用以下代码创建一个包含所述数据的查询:

   On Error Resume Next
           DoCmd.DeleteObject acQuery, "IsAdminQ"
   On Error GoTo Err_LoginBtn_Click

     Dim qdef As DAO.QueryDef
       Set qdef = CurrentDb.CreateQueryDef("IsAdminQ", _
                                           "SELECT IsAdmin " & _
                                           "FROM LoginInfoT " & _
                                           "WHERE EmployeeID = " & LoginCmBx.Value)


    Exit_LoginBtn_Click:
    DoCmd.Close acForm, "LoginF", acSaveNo
            DoCmd.OpenForm "MenuF"
       Exit Sub
    Err_LoginBtn_Click:
       MsgBox Err.Description
       Resume Exit_LoginBtn_Click

登录后从该查询中只有1列和1行;意思是一条数据。此数据是是/否字段,可以是“是”或“否”,具体取决于您登录的对象。

在单击登录按钮后打开的表单上有一个注销按钮。注销按钮将您带到上一个登录表单,并删除查询(IsAdminQ)。

我要做的是在表单上附加是/否按钮来获取该数据,如果查询中的是或否则输出。

我已经尝试将它放在它的控制源中:

= [IsAdminQ]。[IsAdmin]

虽然它的作用是将其输出为填充方形而不是复选标记或空白。我将三重状态设置为否。

如何将复选框附加到查询中,如果数据显示为是,那么它是一个复选标记,如果它显示不是它是一个空框?

1 个答案:

答案 0 :(得分:1)

我理解你。

“在单击登录按钮后打开的表单上有一个注销按钮”,我们称之为frmLogout。你应该这样做:

解决方案I:

frmLogout.RecordSource = "IsAdminQ"

然后,对于名为MyCheckbox的复选框,我们将其设置为:

Me.MyCheckbox.ControlSource = "IsAdmin"

你不能用这个:

Me.MyCheckbox.ControlSource = "[IsAdminQ].[IsAdmin]"  ' <= here it's impossible.

解决方案II:

在表格frmLogout上,未将IsAdminQ设置为.RecordSource,

在公共模块中,插入:

Function GetLoginStateIsAdmin()
'
  Dim rst As DAO.Recordset

  Set rst = CurrentDb.OpenRecordSet("IsAdminQ")

  GetLoginStateIsAdmin = Nz(rst(0), False)

  Set rst = Nothing
'
End Function

然后在任何形式的私有模块中,如frmLogout:

Private Sub Form_Open(Cancel As Integer)
'
  Me.MyCheckbox.Value = GetLoginStateIsAdmin()
'
End Sub

在设计模式中另外设置:

Me.MyCheckbox.TripleState = false

并检查在登录步骤中是否已成功创建查询IsAdminQ。然后双击它在Access Navigation Pane中打开它。并查看查询的值。