Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问VBA插件时出现问题_Vba_Ms Access_Dao - Fatal编程技术网

访问VBA插件时出现问题

访问VBA插件时出现问题,vba,ms-access,dao,Vba,Ms Access,Dao,我在插入时遇到了一个错误,我似乎无法理解。代码遍历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_APP

我在插入时遇到了一个错误,我似乎无法理解。代码遍历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语句中不断遇到语法错误,但我已经检查了好几次了


编辑-解释。带有空格或标点/特殊字符(唯一的例外是下划线)的标记

名称需要用[]括起来。在命名约定中最好避免这些。但是,对带有引号的记录集字段的引用不应包含在[]中。另一种需要[]的语法是:
rs![生效日期]

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 Date]
,正如@Nathan_Sav所说的,只有在您的查询中带有空格的名称远远多于
[Eff Date]
,它们都需要用方括号括起来。此外,注意变量类型。如果[Eff Date]是一个日期而不是字符串,则说明您处理它的方式不正确。另外请注意,如果您上面共享的代码已完成,则可以用一个追加查询来替换它,这样可以更高效地运行,并且更易于调试。@ErikvonAsmuth遗憾的是,我无法运行追加查询,因为这会添加一批记录,而我需要检查每个记录,然后再添加它。谢谢。不幸的是,我使用的是一个不是我自己设计的遗留系统。因此,我注意到在日期/时间和数字字段中使用了撇号分隔符。撇号应该只用于文本字段。#表示日期/时间,数字类型不需要分隔符。所有字段都是文本类型吗?不,你能举个例子吗?Eff数据是一个日期。实际上,我刚刚用日期/时间和数字字段的撇号分隔符测试了INSERT,它确实有效。但是,在WHERE子句中不起作用,因为INSERT不使用WHERE子句,所以这里没有问题。请注意其他SQL语句,如SELECT、UPDATE、DELETE。