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】:为此使用 DMax 和 DLookup:
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 选择语句打开记录集的主要内容,如果未能解决你的问题,请参考以下文章
在文件夹中的所有 Access 文件中运行 Access VBA