对象变量错误

时间:2013-09-19 03:22:49

标签: ms-access access-vba ms-access-2003

我有一个基于表注册的子表单(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变量错误,但现在返回"参数太少"错误。原始表名称"年份"已经改为" YearT,"因为我只是在这一段代码中引用它。

更新

现在我已经修复了RegistrationFsub,似乎按钮会插入当前显示在表单上其他控件中的数据。因此,如果2012条目包含RID = 1Leader = True,则上述代码会在Registration中创建一个条目 还有RID = 1Leader = True }。如何将其他字段留空?

3 个答案:

答案 0 :(得分:1)

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

Set db = CurrentDb

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

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

答案 1 :(得分: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];"

答案 2 :(得分: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认为是参数的名称。

此处的问题是YearStart在表格Year中有不同的字段名称。

非常感谢明确而有帮助的答案。