Access VBA 中的运行时 3464。尝试使用 SQL 选择语句打开记录集

Posted

技术标签:

【中文标题】Access VBA 中的运行时 3464。尝试使用 SQL 选择语句打开记录集【英文标题】:Run-time 3464 in Access VBA. Trying to open a recordset with SQL select statement 【发布时间】:2016-03-23 09:34:12 【问题描述】:

我在尝试使此代码正常工作时遇到问题:

Public Sub GetDepot()
    Dim fs As Date
    Dim ss As Long

    fs = CurrentDb.OpenRecordset("SELECT Max(fldMovementDate) FROM [tblMovements] WHERE [fldMovementTypeIdfk] =1")(0)

    ss = CurrentDb.OpenRecordset("SELECT(fldMovementLocationIdfk) FROM [tblMovements]  WHERE [fldMovementDate]= '" & fs & "'")(0)

    MsgBox (ss)
End Sub

最终,我试图从其最后一个仓库位置填充表单上的文本框。调试会找出我试图设置 ss 变量的位置。我的 SQL 语句出了点问题,并尝试了各种方法来纠正它,但无济于事。我还尝试将变量存储为不同的数据类型,认为这可能是我出错的地方,但这种方法仍然无法解决问题。

最后的 MsgBox 只是用来帮助尝试和调试,但代码并没有那么远。我知道我需要向这个 Sub 添加更多内容才能完成我需要的内容,但无法进一步完成。

我还尝试设置一个 MsgBox 以显示 fs 变量存储的内容,这似乎显示了正确的日期,即 18/02/16。

如果有人能提供帮助,将不胜感激!

【问题讨论】:

【参考方案1】:

为此使用 DMaxDLookup

fs = DMax("fldMovementDate", "[tblMovements]", "[fldMovementTypeIdfk] = 1")

ss = DLookup("fldMovementLocationIdfk", "[tblMovements]", "[fldMovementDate]= #" & Format(fs, "yyyy\/mm\/dd") & "#")

或者这样做:

Public Sub GetDepot()

    Dim rs As DAO.Recordset
    Dim ss As Long

    Set rs = CurrentDb.OpenRecordset("SELECT TOP 1 fldMovementLocationIdfk FROM [tblMovements] WHERE [fldMovementTypeIdfk] = 1 ORDER BY fldMovementDate DESC")

    ss = rs(0).Value
    rs.Close

    Set rs = Nothing

    MsgBox (ss)

End Sub`

【讨论】:

啊,非常感谢@Gustav,你不会相信这让我困惑了多久!像魅力一样工作!

以上是关于Access VBA 中的运行时 3464。尝试使用 SQL 选择语句打开记录集的主要内容,如果未能解决你的问题,请参考以下文章

OpenRecordSet 的数据类型不匹配错误

Access 中的运行时错误 3011

在 Access VBA 中添加附件

在文件夹中的所有 Access 文件中运行 Access VBA

运行查询时出现运行时错误 3075 MS Access VBA

Ms Access SQL 更新语句不起作用