我拥有并插入和更新查询。
我想创建一个同时运行插入查询或更新和插入查询的按钮。
在表单上:
如果cbx =值x,y或z,请运行插入并更新。
如果cbx不等于x,y或z值,则只运行插入操作。
到目前为止,我有:
IF (Cbx=X OR Cbx =Y or cbx =Z) Then
Currentdb.execute("updateQuery")
Currentdb.execute("inserQuery")
ELSEIF (Cbx<>X OR Cbx <>Y or cbx <>Z) THEN
CurrentDB.execute("insertQuery")
ElSE
end if
当我运行它时,表陷入了一个连续的写入/编辑循环。
SQL
UPDATE
tbsurveypersonnel
SET tbsurveypersonnel.removedDate = DATE()
WHERE
(
(
(
tbsurveypersonnel.[sr]
)
=[Forms]![fatbSurveyPersonnelSetRoles]![sr]
)
AND
(
(
tbsurveypersonnel.[role]
)
=[Forms]![fatbSurveyPersonnelSetRoles]![role]
)
)
;
INSERT INTO tbsurveypersonnel
(
sr
, lfname
, role
, aDate
)
VALUES
(
(
(
tbsurveypersonnel.[sr]
)
=[Forms]![fatbSurveyPersonnelSetRoles]![sr]
)
, ((tbsurveypersonnel.[lfname])=[Forms]![fatbSurveyPersonnelSetRoles]![lfname])
)
,
(
(
tbsurveypersonnel.[role]
)
=[Forms]![fatbSurveyPersonnelSetRoles]![role]
)
), DATE()
最终
Private Sub AssignRole_Click()
Dim strSql As String
Dim strlSQL2 As String
strSql = "UPDATE tbsurveypersonnel SET tbsurveypersonnel.removedDate = Now() " & vbCrLf & _
"WHERE removedDate is Null and (((tbsurveypersonnel.[sr])=[Forms]![fatbSurveyPersonnelSetRoles]![sr]) AND ((tbsurveypersonnel.[role])=[Forms]![fatbSurveyPersonnelSetRoles]![role]));"
strSQL2 = "INSERT INTO tbsurveypersonnel ( sr, lfname, role, assigndate ) " & vbCrLf & _
"SELECT [forms].[fatbSurveyPersonnelSetRoles].[sr] AS Expr1, [forms].[fatbSurveyPersonnelSetRoles].[lfName] AS Expr2, [forms].[fatbSurveyPersonnelSetRoles].[role] AS Expr3, Now() AS Expr4;"
If (Me.role = 1 Or Me.role = 2 Or Me.role = 3) Then
DoCmd.RunSQL strSql
DoCmd.RunSQL strSQL2
Else
DoCmd.RunSQL strSQL2
End If
DoCmd.RunCommand acCmdSaveRecord
DoCmd.Requery
End Sub
答案 0 :(得分:1)
回答原始问题:
如果cbx =值x,y或z,请运行插入并更新。
所以你想要这个:
IF (Cbx=X OR Cbx=Y OR cbx=Z) Then
Currentdb.execute("updateQuery")
Currentdb.execute("inserQuery")
ELSE
CurrentDB.execute("insertQuery")
end if
答案 1 :(得分:0)
您无需再问同样的问题。
If 'this criteria is met
Then
'Do some code
Else
'Do something else
End If
所以在实践中:
IF (Cbx<>X OR Cbx <>Y or cbx <>Z) Then
Currentdb.execute("updateQuery")
Currentdb.execute("inserQuery")
ELSE
CurrentDB.execute("insertQuery")
END IF
答案 2 :(得分:0)
每次创建数据库副本(通常是实例,而不是引用!)(通常是DbEngine(0)(0))时,避免多次调用CurrentDb
,这通常是不需要的,并且会引起错误。 / p>
更好地将实例存储在变量中或扩展其范围。
With CurrentDb
If (Cbx=X Or Cbx=Y Or Cbx=Z) Then
.Execute("updateQuery", dbFailOnError)
End If
.Execute("insertQuery", dbFailOnError)
End With
由于insertQuery
始终执行,因此只需检查是否需要执行updateQuery
。