打开Recordset MS Access时出错

时间:2011-05-27 15:38:39

标签: ms-access recordset

我在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

非常感谢!

2 个答案:

答案 0 :(得分:4)

日期,用户和类型都是MS Access中的特殊字词或保留字。请勿将它们用于您的字段名称。

您可以通过将每个括号括在括号中取得一些成功,但我强烈建议您更改字段名称。

答案 1 :(得分:1)

创建一个新数据库。

打开新数据库,确保参考文件中包含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功能的计算机上尝试此操作。

如果它适用于新数据库,但不适用于旧数据库,则旧数据库可能已损坏。首先制作备份副本,然后尝试Compact&维修。

另一个问题是您的字段名称。日期,用户和类型都是访问保留字。见Problem names and reserved words in Access。我不能说这些名称在这里引起了问题,但是使用数据库对象(表,字段,查询等)的保留名称可能会产生严重的后果......就像它混淆了Access的废话一样。所以我苛刻地避开它们。

编辑:您还应该检查旧数据库中的引用。缺失/损坏的引用也会混淆Access的废话。