【问题标题】:Using query yes/no field for checkbox record source?对复选框记录源使用查询是/否字段?
【发布时间】:2013-11-06 21:35:33
【问题描述】:

首先,您从一个名为 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]

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

我如何将复选框附加到查询中,所以如果数据说是,那么它是一个复选标记,如果它说不是,它是一个空框?

【问题讨论】:

  • 你的问题很不清楚。你到底想说什么?
  • 我正在尝试将复选框附加到查询中。虽然当我将该信息输入复选框的记录源时,它会在应该为“是”时输出第三个选项(是和否)。
  • 如果你害怕暴露你的代码,请举一些其他的例子来说明你的问题。输入一些示例数据、预期输出以及您已经尝试过的内容,以便我们找到出路。
  • 编辑了更多信息,这样更好吗?

标签: sql vba ms-access checkbox


【解决方案1】:

我理解你。

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

解决方案一:

frmLogout.RecordSource = "IsAdminQ"

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

Me.MyCheckbox.ControlSource = "IsAdmin"

你不能用这个:

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

方案二:

在没有将 IsAdminQ 设置为 .RecordSource 的情况下,在 frmLogout 表单上,

在公共模块中,插入:

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。并通过双击它在访问导航窗格中打开它。并查看查询的值。

【讨论】:

  • 这很有帮助,我最终会使用它。不过,有没有办法解决设置表单记录源的需要?我将在数据库中的每个表单上设置此复选框以检查用户是否是管理员;所以如果他们是他们可以右键单击,如果他们不是他们不能右键单击。虽然我的一些表格已经有记录源集。是否可以设置两个记录源,或者只是绕过在此使用表单记录源的需要?
  • 您应该执行查询以获取值,然后设置 Me.MyCheckbox.value = [VBA 获取的复选框的值]
  • 奇怪的是,当我将该代码应用于表单然后登录时;它吐出这个错误:运行时错误'2448':你不能给这个对象赋值。
  • 您必须先在设计模式下清理这个 Me.MyCheckbox.ControlSource = "",然后才能为其设置值。
  • 好的,现在它启动没有错误。虽然复选框是状态上升的第三个状态,但我可以修改复选框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多