MS Access错误3464 - 在INSERT INTO语句中使用变量作为字段

时间:2016-01-20 16:33:37

标签: vba access-vba

我正在尝试使用带有INSERT INTO语句中的变量的vba运行查询,以选择要使用的字段。我做了一些研究,发现了一些类似的问题,其中解决方案是创建一个带变量的函数并在我的sql语句中调用该函数,但我仍然遇到问题。如果我对该字段进行硬编码,则可行。提前致谢。到目前为止,这是我的代码:

Option Compare Database
Public var As Variant

Public Function GetVar() As String
    GetVar = var
End Function

Sub Build()

Dim varX As String
Dim count As Integer
Dim AccountName As String

For count = 1 To 50

    varX = DLookup("[AcctName]", "AcctTable", "[AcctNum] =" & count)
    AccountName = varX
    var = varX


    StrSql = "INSERT INTO [Testresult] (Year, Period, Entity, Region, [Product Recall], Account, AcctVal)" & _
    " SELECT Year, Period, Entity, Region, [Product Recall], """ & AccountName & """, getvar() FROM [MFTest] "

    CurrentDb().Execute StrSql, dbFailOnError

    Next count

End Sub

1 个答案:

答案 0 :(得分:0)

您似乎正在从MfTest获取每条记录,并将每个帐号1-50添加到新表中。如果是这样的话,会是这样的:

INSERT INTO [Testresult]
([Year], [Period], [Entity], [Region], [Product Recall], [Account], [AcctVal])
SELECT
  [MFTest].[Year], [MFTest].[Period], [MFTest].[Entity], [MFTest].[Region],
  [MFTest].[Product Recall], [AcctTable].[AccountName], [AcctTable].[AccountName]
FROM
  [MFTest],
  [AcctTable]
WHERE
  [AcctTable].[AcctNum] between 1 and 50

作为单个陈述而不是循环内?

唯一需要注意的是,上面的代码还应该包含没有此类帐号的空白 - 这可能是您想要的,但我会直觉地怀疑没有,因为您会为每个非帐号重复空白。

顺便说一句,这是一个笛卡尔式的连接,通常是偶然的,但在这种情况下,它似乎就是你想要的。

如果这不起作用,我建议您在插入查询中添加参数。即使你能使它工作,参数(绑定变量)也是一种更好的做法,从长远来看会让你头疼。