我想设置一个公共函数,如下:
(a(
Public Function CheckYNField(chkControl As Control, chkField As String)
If chkField = "Y" Then
chkControl = -1
ElseIf chkField = "N" Then
chkControl = 0
Else: chkControl = 0
End If
End Function
(b(
Public Function CheckYNFlipper(chkControl As Control, chkField As String)
If chkField = "Y" Then
chkField = "N"
chkControl = 0
ElseIf chkField = "N" Then
chkField = "Y"
chkControl = -1
Else: chkField = "Y"
chkControl = -1
End If
End Function
这样做的原因是,我有一个形式,该表格具有下面的SQL表。我无法控制数据,但我必须代表它,以维护数据。我有10个字段,在基础表中,它们具有y或n作为其值。数据类型实际上是NVARCHAR(10(。同时,我必须将这些字段显示为复选框控件,表单上,以易于使用。
上面的代码是我对A的尝试并根据该控件的ONCLICK事件将复选框切换到检查或未检查的情况。
我想将chkfield和chkcontrol变量变成公共功能,那就是桌面,以及形式控制。我似乎无法获得正确的语法,并希望有人可以澄清如何做到这一点。
对于表格负载和电流,我尝试了以下方式:
CheckYNField Forms("frmFormNameA").Controls(chkCheckNameA), tblTableName.FieldA
对于单击,我尝试了以下操作:
CheckYNFlipper Forms("frmFormNameA").Controls(chkCheckNameA), tblTableName.FieldA
我已经尝试了其他一些方法,但似乎没有起作用。我做错了什么,但我不能说什么。感谢任何提示!
编辑/更新:我尝试了Kostas K.的解决方案,放弃了用字段和控件参数来制作公共功能的想法。我将以下内容放在负载和当前:
上With Me
If .txtfieldboundtablefieldA.Value = "Y" Then
.unboundchkA.Value = True
ElseIf .txtfieldboundtablefieldA.Value = "N" Then
.unboundchkA.Value = False
Else: .unboundchkA.Value = False
End If
End With
这是连续形式的,因此可以像巨大的网格一样显示出来。有一些识别绑定的字段控件,然后是一系列这些复选框,以显示每个特定字段的y/n true/false状态。我无法将复选框绑定到字段,因为它将表中的字段值更改为-1或0,我们需要将其保留y或n。我添加了一个绑定的文本字段,以保持表/字段值对于每一行(因此,在上述修订的代码中对文本框控件的调用(。该复选框是未结合的,并且可以在那里显示字段值,并允许用户检查和取消选中,因此我可以使用单击代码更改y和n。
之间的表字段值。基于每一行,上面的代码似乎并未显示每个绑定文本字段的正确复选框值。它根据当前有重点的行显示。如果我单击一行,表字段为y,则表格上的所有行复选框显示为true。如果我移动到一行,在该行中为N,则所有行的所有复选框都会更改为false。我努力根据表中的每个记录,在连续表格的每一行上只能获得1个复选框,以准确显示。这是一张小桌子,例如30个记录。我真的认为以我们需要的方式呈现这并不难。
有什么想法,我怎么能做到这一点?
编辑:
将复选框的控制源设置为:
= IIf([YourYesNoField] = "Y", -1, 0)
为了单击时更新:
Private Sub chkCheckNameA_Click()
Dim yesNo As String
yesNo = IIf(Me.chkCheckNameA.Value = 0, "Y", "N") 'reverse value
CurrentDb.Execute "Update [YourTable] SET [YourYesNoField]='" & yesNo & "' WHERE [ID]=" & Me![ID], dbFailOnError
Me.Requery
End Sub
您可以尝试一下。
检查Y/N字段,并将函数的布尔返回值分配到复选框(a(。
在复选框单击事件上,检查其值并更新Y/N字段(B(。
'Form Load
Private Sub Form_Load()
With Me
.chkCheckNameA.Value = CheckYNField(![FieldA])
End With
End Sub
'Click
Private Sub chkCheckNameA_Click()
With Me
![FieldA] = IIf(.chkCheckNameA.Value = 0, "N", "Y")
End With
End Sub
'True returns -1, False returns 0
Private Function CheckYNField(ByVal chkField As String) As Boolean
CheckYNField = (chkField = "Y")
End Function
chkcontrol是一个控件,因此您需要访问该控件的属性。尝试将代码更改为:
Public Function CheckYNField(chkControl As Control, chkField As String)
If chkField = "Y" Then
chkControl.Value = -1
ElseIf chkField = "N" Then
chkControl.Value = 0
Else: chkControl.Value = 0
End If
End Function
,然后在您的其他功能中相同的想法。