我有一个ms访问数据库,其中包含一些是/否列我要检查并设置第三个值。声明应该类似于以下
if !col1 && !col2:
col3 = no
else:
col3= yes
我一直在寻找,但不是真的了解vba而且无法找到我需要的东西..大部分都是对我无法做出的其他事情的答案的一部分。目前正试图在"模块中创建它"那节甚至是对的?如果这些可以自动完成,因为这些列已更改或可能运行一次并执行所有行,那将是最好的。请帮助我走上正确的轨道,任何帮助非常感谢。
答案 0 :(得分:1)
以下是我要做的事情:
1-创建表单并在其上添加至少一个命令按钮。将其命名为cmdMyButton或cmdAnythingThatYouWant(cmd是Microsoft的示例中用于命令按钮的前缀)
2-在设计视图中,双击命令按钮以弹出代码窗口
3-在onClick()函数中,编写为您的表打开记录集的代码,循环记录以及每行,验证这两列的值并根据需要进行更新。 (查看DAO.recordset的文档)
答案 1 :(得分:1)
假设您有一个名为Table1
的Access表,其中包含一些Access字段:
对于col3
中的每一行,以下Access SQL语句将根据col1
和col2
的值更新Table1
的值:
UPDATE Table1
SET col3 = NOT col1 AND NOT col2
有很多方法可以利用这个SQL语句:
您可以在SQL视图中将其粘贴到查询设计器中,并通过Access UI执行
您可以将其作为Access宏的一部分运行
您可以使用ADO或DAO
您可以使用DoCmd.RunSQL
方法在VBA中执行
您可以使用另一种支持自动化的编程语言
答案 2 :(得分:0)
我只想在数据库表中的计算列上创建它。见下面的屏幕截图:
注意在属性中我设置了一个公式,以根据前两列获取所需的结果。 “结果类型”设置为是/否以模仿是/否字段。唯一的区别是,第三列将显示-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
如果您需要更多帮助或解释,请告诉我,我很乐意为您提供帮助。