【问题标题】:Trouble with ACCESS VBA INSERT INTOACCESS VBA INSERT INTO 问题
【发布时间】:2023-03-04 15:35:01
【问题描述】:

我在这个 INSERT INTO 中遇到了一个我似乎无法弄清楚的错误。代码遍历 Dao 记录集,仅将某些记录附加到表中。

    Dim maxDate As Variant

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sqlinsert As String

maxDate = DMax("[Eff Date]", "400_CF_BREAK_LOG")
Set db = CurrentDb


Set rs = db.OpenRecordset("860_APPEND_DIFFERENCES")
If Not rs.BOF Then
    'populate the table
    rs.MoveFirst
    Do
        If (rs![Eff Date] > maxDate Or IsNull(maxDate)) Then
            sqlinsert = "INSERT INTO 400_CF_BREAK_LOG (Eff Date, PrimarySecurity ID Number, CUSIP(Aladdin ID), IsrName, Asset Type, Metlife Port Code, Business Unit, Principal Difference, Total PAM Principal, Total Aladdin Principal,Income Difference, Total PAM Interest,Total Aladdin Interest,Total CF Difference,Total PAM CF,PAM Coupon)" & _
            " VALUES ('" & rs("Eff Date") & "', '" & rs("PrimarySecurity ID Number") & "', '" & rs("CUSIP(Aladdin ID)") & "', '" & rs("IsrName") & "', '" & rs("Asset Type") & "', '" & rs("Metlife Port Code") & "', '" & rs("Business Unit") & "', '" & rs("Principal Difference") & "',  '" & rs("Total PAM Principal") & "',  '" & rs("Total Aladdin Principal") & "','" & rs("Income Difference") & "', '" & rs("Total PAM Interest") & "', '" & rs("Total Aladdin Interest") & "', '" & rs("Total CF Difference") & "', '" & rs("Total PAM CF") & "', '" & rs("PAM Coupon") & "') "
            DoCmd.RunSQL (sqlinsert)
        End If
        rs.MoveNext
    Loop Until rs.EOF
End If

我在 INSERT INTO 语句中不断收到语法错误,但我已经检查了几次。

编辑 - 解释。标签

【问题讨论】:

  • 不能使用空格,需要使用[Eff Date]
  • 正如@Nathan_Sav 所说,您的查询中带有空格的名称仅比[Eff Date] 多得多,它们都需要用方括号括起来。另外,注意变量类型。如果 [Eff Date] 是日期而不是字符串,则说明您处理不正确。另请注意,如果您在上面共享的代码是完整的,则可以将其替换为单个追加查询,并且运行效率更高并且更易于调试。
  • @ErikvonAsmuth 不幸的是,我无法运行附加查询,因为它会添加一批记录,而我需要检查每条记录然后添加它。

标签: vba ms-access dao


【解决方案1】:

带有空格或标点符号/特殊字符(唯一例外是下划线)的名称需要用 [ ] 括起来。最好在命名约定中避免这些。但是,使用引号对记录集字段的引用应该可以在不包含在 [ ] 中的情况下工作。需要 [ ] 的替代语法是:rs![Eff Date]

sqlinsert = "INSERT INTO 400_CF_BREAK_LOG ([Eff Date], [PrimarySecurity ID Number],  
[CUSIP(Aladdin ID)], IsrName, [Asset Type], [Metlife Port Code], [Business Unit],  
[Principal Difference], [Total PAM Principal], [Total Aladdin Principal],  
[Income Difference], [Total PAM Interest], [Total Aladdin Interest], [Total CF Difference],  
[Total PAM CF], [PAM Coupon])" & _  
" VALUES ('" & rs("Eff Date") & "', '" & rs("PrimarySecurity ID Number") & "', '" & 
rs("CUSIP(Aladdin ID)") & "', '" & rs("IsrName") & "', '" & rs("Asset Type") & "', '" & 
rs("Metlife Port Code") & "', '" & rs("Business Unit") & "', '" & rs("Principal Difference") & "',  '" & 
rs("Total PAM Principal") & "',  '" & rs("Total Aladdin Principal") & "','" & 
rs("Income Difference") & "', '" & rs("Total PAM Interest") & "', '" & 
rs("Total Aladdin Interest") & "', '" & rs("Total CF Difference") & "', '" & rs("Total PAM CF") & "', '" & 
rs("PAM Coupon") & "') "

【讨论】:

  • 谢谢。不幸的是,我使用的不是我自己设计的遗留系统
  • 另外,我刚刚注意到在日期/时间和数字字段中使用了撇号分隔符。撇号应该只用于文本字段。 # 用于日期/时间,数字类型不需要分隔符。所有字段都是文本类型吗?
  • 不,你能举个例子吗? Eff 数据是一个日期。
  • 实际上,我刚刚对日期/时间和数字字段的撇号分隔符进行了 INSERT 测试,它确实有效。但是,在 WHERE 子句中不起作用,因为 INSERT 不使用 WHERE 子句,所以这里不是问题。请注意其他 SQL 语句,例如 SELECT、UPDATE、DELETE。
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 2021-09-09
  • 1970-01-01
  • 2015-12-24
  • 2011-05-18
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多