打开记录集 MSAccess 时出错
Posted
技术标签:
【中文标题】打开记录集 MSAccess 时出错【英文标题】:Errors on Opening Recordset MSAccess 【发布时间】:2011-05-27 15:38:38 【问题描述】:我在 Access 中使用以下代码尝试打开记录集:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("fieldHistory")
我一直收到错误“参数太少”。
fieldHistory 是一个查询,SQL 代码如下:
SELECT Date, User, Type
FROM Inventory
WHERE ((Inventory.Type) In ("Insert","EditTo"));
我对此进行了一些研究 - 我发现如果我使用代码 db.OpenRecordset("Select * from Inventory") 我不会收到错误消息。
另外,我发现这个论坛似乎正在讨论某些问题,但我不明白如何创建适当的 querydef 对象来创建我的查询。
http://access.mvps.org/access/queries/qry0013.htm
非常感谢!
【问题讨论】:
【参考方案1】:日期、用户和类型都是 MS Access 中的特殊字或保留字。不要将它们用作您的字段名称。
将每个字段括在括号中可能会取得一些成功,但我强烈建议您更改字段名称。
【讨论】:
对不起 - 为了澄清 - 这些不是我的实际字段名称。我在这里只是为了简化而使用它们。【参考方案2】:创建一个新的数据库。
打开新数据库并确保引用中包含 DAO。
插入一个新的标准模块,确保在声明部分包含 Option Explicit。
然后粘贴这段代码并运行它。
Public Sub CreateTableZack()
Dim strSql As String
strSql = "CREATE TABLE tblZack (" & vbNewLine & _
vbTab & "id COUNTER CONSTRAINT pkey PRIMARY KEY," & vbNewLine & _
vbTab & "foo_text TEXT(255)," & vbNewLine & _
vbTab & "date_assigned DATETIME);"
Debug.Print strSql
CurrentProject.Connection.Execute strSql
End Sub
假设表创建成功,创建 qryZack 并以此为 SQL:
SELECT *
FROM tblZack;
然后尝试您的代码打开基于 qryZack 的 DAO 记录集。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("qryZack")
有效吗?
如果没有,您的 Access 安装可能会损坏...您可能需要修复或重新安装它。如果可以的话,你也可以在另一台有 Access 的机器上试试这个。
如果它适用于新数据库,但不适用于旧数据库,则旧数据库可能已损坏。首先制作备份副本,然后尝试压缩和修复。
另一个问题是您的字段名称。 Date、User 和 Type 都是 Access 保留字。见Problem names and reserved words in Access。我不能说这些名称在这里造成了问题,但是为数据库对象(表、字段、查询等)使用保留名称可能会产生严重的后果......就像它混淆了 Access 的废话。所以我小心翼翼地避开它们。
编辑:您还应该检查旧数据库中的引用。缺少/损坏的引用也会混淆 Access 的废话。
【讨论】:
以上是关于打开记录集 MSAccess 时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 DAO 在 Ms Access 中打开记录集时使用 With...End
Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单
MSAccess 2010 + VBA:值不是记录集字段对象的默认属性