Ms access MS Access错误3464-对INSERT INTO语句中的字段使用变量
我正在尝试使用vba运行查询,在INSERT INTO语句中使用一个变量来选择要使用的字段。我做了一些研究,发现了一些类似的问题,解决方案是创建一个带有变量的函数,并在sql语句中调用该函数,但我仍然遇到了一些问题。如果我硬编码这个字段,它就会工作。提前谢谢。以下是我目前的代码:Ms access MS Access错误3464-对INSERT INTO语句中的字段使用变量,ms-access,vba,Ms Access,Vba,我正在尝试使用vba运行查询,在INSERT INTO语句中使用一个变量来选择要使用的字段。我做了一些研究,发现了一些类似的问题,解决方案是创建一个带有变量的函数,并在sql语句中调用该函数,但我仍然遇到了一些问题。如果我硬编码这个字段,它就会工作。提前谢谢。以下是我目前的代码: Option Compare Database Public var As Variant Public Function GetVar() As String GetVar = var End Functi
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
看起来您正在从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
作为单个语句,而不是在循环中
唯一需要注意的是,上面的代码还应该包括没有此类账号的空格——这可能是您想要的,但我直觉上怀疑不是,因为您会为每个非账号重复空格
顺便说一下,这是一个笛卡尔连接,通常是偶然完成的,但在这种情况下,它似乎是您想要的
如果这不起作用,我建议在insert查询中添加参数。即使您可以让它工作,参数绑定变量也是一种更好的做法,从长远来看,它将为您省去麻烦。添加调试。将StrSql打印到CurrentDb.Execute之前的行中,然后运行代码。当您再次出现错误3464时,从即时窗口复制StrSql文本并显示给我们。您可以使用Ctrl+g转到即时窗口。此外,当您得到错误时,var的值是多少?以下是打印输出:插入[Testresult]年、期间、实体、地区、[Product Recall],帐户、会计科目选择年、期间、实体、地区、[Product Recall],其他毛保费,从[MFTest]获取var。Var=其他总保费。我试图从表中提取其他字段,我认为这是引号的问题?那么如果您更改&AccountName&to&AccountName&try.,[&AccountName&],…也将语句中的两个位置更改为[Year],以区分字段和Year函数,您是否得到了想要的结果。Hambone,实际上,我想做的是将多列数据表重新格式化为单列表。我试图使用一个变量来选择数据列,但无法获得正确的语法。Nathan_Sav和HansUp回答了我的问题。谢谢