打开记录集 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:值不是记录集字段对象的默认属性

将 dbSeeChanges 应用于所有记录集 VBA

MS Access 2007 - 导入表后,记录集不再可更新

SELECT 查询中的 MS Access“此记录集不可更新”