MS访问检查列值并更改另一个

问题描述 投票:0回答:3

我有一个ms访问数据库,我想要检查一些是/否列,并设置第三个值。声明应如下所示

if !col1 && !col2:
         col3 = no
else:
    col3= yes

我一直在寻找,但并不真正了解vba,也无法找到我需要的东西..大部分都是我无法解决的其他问题的一部分。目前尝试在“模块”部分创建它甚至是正确的?如果这些可以自动完成,因为这些列已更改或可能运行一次并执行所有行,那将是最好的。请帮助我走上正确的轨道,任何帮助非常感谢。

vba ms-access
3个回答
1
投票

这是我要做的:

1-创建表单并在其上添加至少一个命令按钮。将其命名为cmdMyButton或cmdAnythingThatYouWant(cmd是Microsoft的示例中用于命令按钮的前缀)

2-在设计视图中,双击命令按钮,弹出代码窗口

3-在onClick()函数中,编写为您的表打开记录集的代码,循环记录和每行,验证这两列的值并根据需要进行更新。 (查看DAO.recordset的文档)


1
投票

假设您有一个名为Table1的Access表,其中包含一些Access字段:

Table1 in Table Designer, with three Yes/No fields

对于col3中的每一行,以下Access SQL语句将根据col1col2的值更新Table1的值:

UPDATE Table1
SET col3 = NOT col1 AND NOT col2

有许多方法可以利用此SQL语句:

  • 您可以将其粘贴到SQL视图中的查询设计器中,并通过Access UI执行它
  • 您可以将其作为Access宏的一部分运行
  • 您可以使用ADO或DAO在VBA中执行它
  • 您可以使用DoCmd.RunSQL方法在VBA中执行它
  • 您可以使用另一种支持自动化的编程语言代替VBA

0
投票

我只想在数据库表中的计算列上创建它。见下面的屏幕截图:

enter image description here

请注意,在属性中我设置了一个公式,以根据前两列获取所需的结果。 “结果类型”设置为是/否以模仿是/否字段。唯一的区别是,第三列将显示-1(True)或0(False)。但是当在表单上显示此信息时,您可以让它以复选框方式显示信息。计算字段也是理想的,因为它只会在更新目标记录时更新第三列,而不是更新整个表,如果表大小开始保持超过100k记录,则非常有用。

如果你想要一个VBA代码,那么你需要一个触发器。我假设它在表单上有一个按钮,如果没有,您可以随时更改以下代码以匹配您想要触发的事件。下面的代码也是一个可以被调用/用于任何触发器的模块。代码也假设您有一个主键。

Public Sub UpdateThirdColumn(ByVal RecordPK As String) 'RecordPK is a passed variable
                                                       'that is the primary key identifier to find the
                                                       'record in the table
'Set variavble name for SQL statement, gives you one place to update instead of hunting through code
Dim strSQL                          As String

'Creates the SQL string in the variable assigned
strSQL = "UPDATE {YourTableNameHere} " & _
         "SET {YourThirdFieldNAmeHere} = True " & _
         "WHERE ((({YourFirstFieldNAmeHere}) = True AND ({YourSecondFieldNAmeHere}) = True AND ({YourPrimaryKeyFieldHere}) ='" & RecordPK & "'));"
'Executes the SQL statement, dbFailOnError will fail if problem exists in SQL statement
CurrentDb.Execute strSQL, dbFailOnError
End Sub

'Use this code if you have a button to trigger event
Private Sub YourButton_Click()
Call UpdateThirdColumn(Me.YourPrimaryKeyControlName)
End Sub

'Use the bottom 2 codes if you want the update for each check box to be checked and update
Private Sub FirstFieldName_AfterUpdate()
Call UpdateThirdColumn(Me.YourPrimaryKeyControlName)
End Sub

Private Sub SecondFieldName_AfterUpdate()
Call UpdateThirdColumn(Me.YourPrimaryKeyControlName)
End Sub

如果您需要更多帮助或解释,请告诉我,我很乐意为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.