所以我有一个相对简单的查询,它恰好有两个参数,其中一个从表单中提取一个 long 并只从一个表中选择记录,其中一个字段具有该值。(这是一个设计项目表,用户正在选择应列出其项目的设计师。)
如果我打开表单,然后手动打开查询,它就可以完美运行。如果我有第二个表单(用查询结果填充列表框)尝试设置一个等于查询结果的记录集,它会失败并显示“运行时错误'3061'。参数太少。预期为 1。”
如果我将参数设置为静态整数,例如 3,它可以正常工作(但显然没用)。为什么我的 VBA 代码无法从表单上的文本字段中读取文本,而 Access 本身显然可以?
这是我的查询:
SELECT [Project Request Log TABLE].Designer1, [Project Request Log TABLE].Priority, [Project Request Log TABLE].ProjectName, [Project Request Log TABLE].Manager, [Project Request Log TABLE].SME1, [Project Request Log TABLE].Priority, [Project Request Log TABLE].ProjectID
FROM Designers INNER JOIN [Project Request Log TABLE] ON Designers.ID = [Project Request Log TABLE].Designer1
WHERE ((([Project Request Log TABLE].Designer1)=[Forms]![frm_selectDesigner]![txtDesignerId]) AND (([Project Request Log TABLE].PercentComplete)<>1))
ORDER BY [Project Request Log TABLE].Designer1, [Project Request Log TABLE].Priority;
这是给出错误的 VBA 行:
Set rst_projects = dbs.OpenRecordset("qryDesignerProjectPrioritySet", dbOpenDynaset)
谢谢。
编辑:一个选择设计器的窗体打开第二个窗体,上面的代码试图打开一个记录集。原来的frm_selectDesigner没有关闭,点击OK时隐藏,但保持打开状态。
编辑2:如果我包括该行
DoCmd.OpenQuery "qryDesignerProjectPrioritySet"
查询打开并具有正确的结果。如果下一行尝试将该查询的结果分配为如上所述的记录集,它会给出 3601 错误?我编写 OpenRecordset 命令的方式一定有某种错误,对吧?