我在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
非常感谢!
答案 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的废话。