尝试插入值时,Access VBA SQL 语句收到语法错误

问题描述 投票:0回答:1

我正在使用 Access VBA 根据表单中的信息将值插入到表中。 SQL 语句抛出语法错误,但是,如果我将 SQL 拉入查询生成器,它将运行,所以我不确定语法错误在哪里。

INSERT INTO [TBLactionstaken] (RecordNumber, ActionID, ReasonID, ActionBy, LetterTo, LetterAddress, LetterType, MANHType, MANReqAmt, NRReason1, NRReason2, NRReason3, NRReason4, NRReason5, RFActionID, ActionDate, ActionStatus) 

Values (" & Forms![frmActions]![txtrecordNumber2] & ", " & Forms![frmActions]![lstActions] & ", " & Forms![frmActions]![lstReasons] & ", '" & _
    Forms![frmActions]![txtActionBy] & "', '" & apostrophe(Forms![frmActions]![cboLetterTo]) & "', '" & Forms![frmActions]![cboLetterAddress] & "', '" & _
    Forms![frmActions]![cboLetterType] & "', '" & IIf(IsNull(Forms![frmActions]![cboMANHType]), "", Forms![frmActions]![cboMANHType]) & "', " & _
    Forms![frmActions]![cboReqAmt] & ", " & IIf(IsNull(Forms![frmActions]![cboNRReason1]), "", "'" & Forms![frmActions]![cboNRReason1] & "'") & ", " & _
    IIf(IsNull(Forms![frmActions]![cboNRReason2]), "", "'" & Forms![frmActions]![cboNRReason2] & "'") & ", " & _
    IIf(IsNull(Forms![frmActions]![cboNRReason3]), "", "'" & Forms![frmActions]![cboNRReason3] & "'") & ", " & _
    IIf(IsNull(Forms![frmActions]![cboNRReason4]), "", "'" & Forms![frmActions]![cboNRReason4] & "'") & ", " & _
    IIf(IsNull(Forms![frmActions]![cboNRReason5]), "", "'" & Forms![frmActions]![cboNRReason5] & "'") & ", " & _
    IIf(IsNull(Forms![frmActions]![cboActID]), "", "'" & Forms![frmActions]![cboActID] & "'") & ", #" & Forms![frmActions]![txtDatereceived] & "#, 'Pending')"
sql vba ms-access insert iif
1个回答
0
投票

这种类型的代码根本不可维护。正如您在尝试调试它时所看到的(可能很痛苦)。

我会将其替换为

RecordSet.AddNew
,您可以在其中逐行将表单值分配给记录集值。这是可读且可维护的。
看评论。

Sub DoSave()

    Dim rs As Dao.Recordset
    Dim f As Access.Form
    
    Set rs = CurrentDb.OpenRecordset("TBLactionstaken", dbOpenDynaset, dbAppendOnly)
    Set f = Forms![frmActions]
    
    With rs
        .AddNew
        !RecordNumber = f!txtrecordNumber2
        !ActionID = f!lstActions
        !ReasonID = f!lstReasons
        !ActionBy = f!txtActionBy
        ' no need to check for apostrophes in strings...
        !LetterTo = f!cboLetterTo
        
        ' etc etc
        
        ' no special handling of NULL values necessary...
        !NRReason1 = f!cboNRReason1
        ' ... unless your table does actually want empty strings instead of NULLs, then do:
        !NRReason2 = Nz(f!cboNRReason1, "")

        ' you could also do...
        For i = 1 To 5
            rs("NRReason" & i) = f("cboNRReason" & i)
        Next i
        
        ' etc etc
        
        .Update
        .Close
    End With
    
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.