Вход MS Access Query должен содержать хотя бы одну таблицу или запрос - PullRequest
0 голосов
/ 11 апреля 2020

нужна помощь в запуске приведенной ниже части кода

        db.Execute "ALTER TABLE QA09_Adj ADD COLUMN EV_DebCred text;"
        Dim debCred As String

        For nId = 1 To rows
          strSQL = "SELECT Debito_Credito_1 FROM QA09_Adj WHERE Id = "
          Set rs = db.OpenRecordset(strSQL & nId)
          debCred = rs!Debito_Credito_1
          rs.Close
          Set rs = Nothing
          If debCred = "C" Then
            strSQL = "INSERT INTO QA09_Adj (EV_DebCred) VALUES ('D') WHERE Id = "
            Set qdf = db.CreateQueryDef("", strSQL & nId)
            qdf.Execute dbFailOnError
          Else
            strSQL = "INSERT INTO QA09_Adj (EV_DebCred) VALUES ('C') WHERE Id = "
            Set qdf = db.CreateQueryDef("", strSQL & nId)
            qdf.Execute dbFailOnError
          End If
        Next nId
End Sub

Попробовал пару вариантов безуспешно. Отладка показывает ошибку упомянутой ошибки на qdf.Execute dbFailOnError

Спасибо!

1 Ответ

1 голос
/ 11 апреля 2020

Как уже упоминалось, поскольку таблицы в SELECT и INSERT одинаковы, скорее всего, вы хотите запустить UPDATE с IIF условной логикой c. Однако, поскольку вы используете QueryDefs, подумайте о правильной параметризации, а не о конкатенации:

' PREPARED STATEMENT
strSQL = "PARAMETERS [paramId] LONG;" _
          & " UPDATE QA09_Adj q" _
          & " SET q.EV_DebCred = IIF(q.Debito_Credito_1 = 'C', 'D', 'C')" _
          & " WHERE Id = [paramId];"

Set qdf = db.CreateQueryDef("", strSQL)      ' INITIALIZE QUERYDEF

For nId = 1 To rows  
  qdf!paramId = nId                          ' BIND PARAMETER
  qdf.Execute dbFailOnError                  ' EXECUTE ACTION
Next nId

Set qdf = Nothing                            ' RELEASE RESOURCE

Конечно. если row включает в себя все строки данных, то l oop, параметр или даже QueryDef не требуются:

db.Execute "UPDATE QA09_Adj q SET q.EV_DebCred = IIF(q.Debito_Credito_1 = 'C', 'D', 'C')", dbFailOnError
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...