我正在尝试使用带有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
答案 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
作为单个陈述而不是循环内?
唯一需要注意的是,上面的代码还应该包含没有此类帐号的空白 - 这可能是您想要的,但我会直觉地怀疑没有,因为您会为每个非帐号重复空白。
顺便说一句,这是一个笛卡尔式的连接,通常是偶然的,但在这种情况下,它似乎就是你想要的。
如果这不起作用,我建议您在插入查询中添加参数。即使你能使它工作,参数(绑定变量)也是一种更好的做法,从长远来看会让你头疼。