我知道,这个问题有很多答案应该是微不足道的,但我找不到合适的答案。这是我的问题: 我用以下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
有人对这个问题有很好的了解吗?
答案 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.
希望有所帮助:)