VBA访问:没有给出一个或多个必需参数的值

时间:2017-07-25 11:56:54

标签: vba access-vba

我知道,这个问题有很多答案应该是微不足道的,但我找不到合适的答案。这是我的问题: 我用以下select语句打开一个记录集:

SELECT twinecellar.produktnavn, twinecellar.land, 
 twinecellar.produkttype,  twinecellar.år, 
 twinecellar.antall, twinecellar.poeng, 
 twinecellar.Picture, twinecellar.KR, 
 twinecellar.Poengsum, twinecellar.Sum
FROM twinecellar
WHERE (((twinecellar.land)=forms!fmainview!list13) 
  And ((twinecellar.produkttype)=forms!fmainview!list15))
ORDER BY twinecellar.poeng;

在immidiate窗口中,我看到列表13包含“france”,列表15包含“red” 当我用这个语句创建一个新的Query时,它正在工作,但是,在rst.Open gsStrQuery上我得到了这个错误。 gsStrQuery包含选择字符串。

以下是代码:

Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset

Set conn = CurrentProject.Connection
Set rst = New ADODB.Recordset

rst.CursorType = adOpenDynamic
rst.ActiveConnection = conn
rst.Open gsStrQuery

有人对这个问题有很好的了解吗?

1 个答案:

答案 0 :(得分:1)

构建SQL字符串时,将“参数”值连接到字符串中。

gsStrQuery = "SELECT twinecellar.produktnavn, twinecellar.land, " & _
                "twinecellar.produkttype,  twinecellar.år, " & _
                "twinecellar.antall, twinecellar.poeng, " & _
                "twinecellar.Picture, twinecellar.KR, " & _
                "twinecellar.Poengsum, twinecellar.Sum " & _
             "FROM twinecellar " & _
             "WHERE (((twinecellar.land)= '" & forms!fmainview!list13 & "') " & _
                "And ((twinecellar.produkttype)= '" & forms!fmainview!list15 & "')) " & _
             "ORDER BY twinecellar.poeng;"

这样,在尝试打开查询之前,您的参数值会被硬编码到字符串中。

(另请注意:我在参数周围添加了单引号以表明它们是字符串。)

(另请注意:& _是VBA的行继续,因此您的SQL字符串可以正确连接。这样您就可以使用可读的SQL代码,并且可以很好地缩进。)

<强> ________________________________

还有一种方法可以使用当前的gsStrQuery并将参数值分配给ADO记录集。 (但是我回过头来回顾代码时发现上面的替换方法更容易阅读。唯一的缺点是每次参数更改时都必须重建SQL字符串。但是对于非复杂的查询,这种开销很小。)

但是,如果您真的想使用ADO参数,可以找到有用的说明here.

希望有所帮助:)