簡體   English   中英

MS Access 查詢輸入必須包含至少一個表或查詢

[英]MS Access Query Input must contain at least one table or query

在運行以下代碼部分時需要幫助

        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上提到的錯誤

謝謝!

如前所述,由於SELECTINSERT中的表是相同的,因此您可能希望使用IIF條件邏輯運行UPDATE 但是,由於您使用的是 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

當然。 如果rows包含所有數據行,則不需要循環或參數甚至 QueryDef:

db.Execute "UPDATE QA09_Adj q SET q.EV_DebCred = IIF(q.Debito_Credito_1 = 'C', 'D', 'C')", dbFailOnError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM