Доступ к VBA: если значение запускается двумя запросами, если не выполняется один - PullRequest
0 голосов
/ 14 марта 2019

У меня есть и вставьте и обновите запрос.

Я хочу создать кнопку, которая запускает либо запрос вставки, либо запрос обновления и вставки.

В форме:

если 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

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Ответы на оригинальный вопрос:

если 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
0 голосов
/ 16 марта 2019

Избегайте множественных вызовов CurrentDb, так как каждый раз, когда вы создаете копию (Instance, а не Reference!) Базы данных (обычно DbEngine (0) (0)), что обычно нежелательно и может вызывать ошибки.

Лучше сохранить экземпляр в переменной или расширить его область.

With CurrentDb
  If (Cbx=X Or Cbx=Y Or Cbx=Z) Then
    .Execute("updateQuery", dbFailOnError)
  End If
  .Execute("insertQuery", dbFailOnError)
End With

Поскольку insertQuery всегда выполняется, достаточно просто проверить, нужно ли выполнять updateQuery.

0 голосов
/ 14 марта 2019

Вам не нужно снова задавать тот же вопрос.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...