1

我有一个基于表注册的子表单(RegistrationFsub)。它的目的是在一个人与他们在组中注册的年份之间建立一对多的关系。

当妈妈在新的一年注册时,我有一个命令按钮,它应该向表中添加一个新行,使用 MomID 注册(来自父表单:MomsFsub)和当前注册年份的开始日期(YearStart,来自表年)。由于当前注册期由最新日期表示,因此我想使用 Max() 命令从 YearT 中检索它。我尝试了以下代码:

Dim db As DAO.Database
Dim sqlSTR As String
Dim IDvar As String
'new code added since question posted
Set db = CurrentDb

Call MsgBox (Max(YearT!YearStart), vbOKonly)
'MsgBox checks value returned for Max(YearStart)
'end new code

IDvar = CStr(MomID)
sqlSTR = "INSERT INTO Registration(YearStart, MomID) SELECT Max(YearStart), "_
   & IDvar & " AS expr1 FROM YearT;"
'new: debug statement
Debug.Print sqlSTR
db.Execute sqlSTR

我得到一个“对象变量或未设置块变量”错误。我究竟做错了什么?

编辑:将 db 设置为 Currentdb 可修复 Object 变量错误,但现在返回“参数太少”错误。原来的表名“Year”已更改为“YearT”,因为无论如何我只在这一段代码中引用它。

更新

现在我已经修复了 RegistrationFsub,似乎该按钮插入了当前显示在表单上其他控件中的数据。因此,如果 2012 条目有RID = 1and Leader = True,上面的代码会在其中创建一个RegistrationandRID = 1的条目Leader = True。我怎样才能将其他字段保留为空白?

4

3 回答 3

1

如果要根据妈妈当前的新条目添加新记录,则需要获取当前时间:Now() 并解析其中的年份。

Year(Now())

寻找 Max(YearStart) 可能是寻找 5 年前发生的记录..

sqlSTR = "INSERT INTO Registration(YearStart, MomID) SELECT Max(YearStart), "_
   & IDvar & " AS expr1 FROM Year;"

我认为您需要将代码更新为两种不同的操作:

sqlSTR = "INSERT INTO Registration(Year(Now()), MomID)"

运行你的代码..然后做一个..

sqlSTR= "SELECT Year(Now()), " & IDvar & " AS expr1 FROM [Year];"
于 2013-09-19T03:37:25.527 回答
1

Set db对象变量错误是因为您在尝试之前没有做任何事情db.Execute。先做这个...

Set db = CurrentDb

如果你以后得到一个错误Execute,可能是因为Year是一个保留字。将该表名括在方括号中以避免混淆数据库引擎。

sqlSTR = "INSERT INTO Registration(YearStart, MomID) SELECT Max(YearStart), "_
   & IDvar & " AS expr1 FROM [Year];"
于 2013-09-19T03:32:22.627 回答
0

最相关的答案在被选中之前已被删除,所以我将内容粘贴在这里:

对象变量错误是因为您在尝试 db.Execute 之前没有将 db 设置为任何内容。先做这个...

Set db = CurrentDb

如果您稍后收到错误Execute,可能是因为Year是保留字。将该表名括在方括号中以避免混淆数据库引擎。

sqlSTR = "INSERT INTO Registration(YearStart, MomID) SELECT Max(YearStart), "_
    & IDvar & " AS expr1 FROM [Year];"

对于“参数太少”,在 sqlSTR = ... 行之后添加 Debug.Print sqlSTR。

但在之前Execute command

运行代码并转到立即窗口 (Ctrl+g)。复制 SQL 文本,在查询设计器中创建一个新查询,切换到 SQL 视图,然后粘贴 SQL 文本。当您运行该查询时,Access 将弹出一个输入框,要求您为参数提供一个值。该框还包括 Access 认为是参数的任何名称。

这里的问题是YearStarttable 中有不同的字段名称Year

非常感谢您提供清晰而有帮助的答案。

于 2013-09-21T15:38:31.093 回答