Ms access Access 2007:“;加上“block”;错误

Ms access Access 2007:“;加上“block”;错误,ms-access,vba,Ms Access,Vba,我不是访问和/或编程方面的专家;所以,我的问题肯定有点傻。。然而,我需要你的帮助,所以。。我敢来问:) 所以,这里就是问题所在:我有一个表单,当它关闭时,将通过VBA代码在先前创建的表中插入和更新一些记录。问题是,我已经尽我所知创建了用于执行此任务的代码,但我一直收到来自VBA编译器的错误消息“91:“未设置对象变量或带块变量” 有人能帮我解决这个问题吗?非常感谢先进的技术;我使用的完整代码如下所示: Private Sub Form_Close() Dim dbs As Database Di

我不是访问和/或编程方面的专家;所以,我的问题肯定有点傻。。然而,我需要你的帮助,所以。。我敢来问:)

所以,这里就是问题所在:我有一个表单,当它关闭时,将通过VBA代码在先前创建的表中插入和更新一些记录。问题是,我已经尽我所知创建了用于执行此任务的代码,但我一直收到来自VBA编译器的错误消息“91:“未设置对象变量或带块变量”

有人能帮我解决这个问题吗?非常感谢先进的技术;我使用的完整代码如下所示:

Private Sub Form_Close()
Dim dbs As Database
Dim rst As recordSet
Dim auxGastoId, auxFecha
Dim auxReg

DoCmd.Echo False
DoCmd.SetWarnings False

DoCmd.OpenQuery "SueldosNuevoRegistroConsulta"

DoCmd.SetWarnings True
DoCmd.Echo True

auxGastoId = DMax("id_gasto", "Gastos")
auxFecha = DLookup("fecha_gasto", "Gastos", "id_gasto = " & auxGastoId)

Set db = CurrentDb()
Set rst = db.OpenRecordset("Empleados", dbOpenDynaset)

rst.MoveFirst

Do While rst.EOF = False

If (Me.nombre_completo <> Null) Then
  If (Me.sueldo <> 0) Then
    dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

    auxReg = DMax("id_gasto_detalle", "SueldosTempo")

   dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _ 
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET servicio = ""Sueldo (" & _
       Me.nombre_completo & ")"" WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _ 
       Me.sueldo & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"

 ElseIf (Me.bono <> 0) Then
   dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

   auxReg = DMax("id_gasto_detalle", "SueldosTempo")

   dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET servicio = ""Bono (" & _
       Me.nombre_completo & ")""  WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _
       Me.bono & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"

   ElseIf (Me.hrExtra <> 0) Then
     dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

     auxReg = DMax("id_gasto_detalle", "SueldosTempo")

     dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET servicio = ""HrExtra (" & _
       Me.nombre_completo & ")""  WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _
       Me.hrExtra & " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"
  Else
  End If
  Else
  End If

  rst.MoveNext

  Loop

  dbs.Close

  Set rst = Nothing
  Set db = Nothing

  End Sub
Private子表单_Close()
dimdbs作为数据库
将rst设置为记录集
小auxGastoId,auxFecha
Dim auxReg
DoCmd.Echo错误
DoCmd.SetWarnings错误
DoCmd.OpenQuery“SueldosNuevoRegistroConsulta”
DoCmd.SetWarnings True
DoCmd.Echo-True
auxGastoId=DMax(“id_gasto”,“Gastos”)
auxFecha=DLookup(“fecha_gasto”、“Gastos”、“id_gasto=”&auxGastoId)
Set db=CurrentDb()
Set rst=db.OpenRecordset(“Empleados”,dbOpenDynaset)
rst.MoveFirst
rst.EOF=False时执行
如果(Me.nombre_completo为Null),则
如果(Me.sueldo 0)那么
dbs.Execute“插入SueldosTempo(fecha_gasto)值(&”_
auxFecha&“
auxReg=DMax(“id_gasto_detalle”,“SueldosTempo”)
dbs.Execute“UPDATE SueldosTempo SET id_gasto=“&”
auxGastoId&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合cantidad=“&”1“&”_
“其中id_gasto_detalle=“&auxReg&;””
dbs.执行“更新SueldosTempo集合服务=”“Sueldo(&)_
Me.nombre_completo&“”,其中id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo SET monto_servicio=“&”
Me.sueldo&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合fecha_gasto=“&_
auxFecha&“WHERE id_gasto_detalle=“&auxReg&;”
ElseIf(Me.bono 0)那么
dbs.Execute“插入SueldosTempo(fecha_gasto)值(&”_
auxFecha&“
auxReg=DMax(“id_gasto_detalle”,“SueldosTempo”)
dbs.Execute“UPDATE SueldosTempo SET id_gasto=“&_
auxGastoId&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合cantidad=“&”1“&”_
“其中id_gasto_detalle=“&auxReg&;””
dbs.Execute“UPDATE SueldosTempo SET servicio=”“Bono(“&_
Me.nombre_completo&“”,其中id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo SET monto_servicio=“&_
Me.bono&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合fecha_gasto=“&_
auxFecha&“WHERE id_gasto_detalle=“&auxReg&;”
ElseIf(Me.hrExtra 0)那么
dbs.Execute“插入SueldosTempo(fecha_gasto)值(&”_
auxFecha&“
auxReg=DMax(“id_gasto_detalle”,“SueldosTempo”)
dbs.Execute“UPDATE SueldosTempo SET id_gasto=“&_
auxGastoId&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合cantidad=“&”1“&”_
“其中id_gasto_detalle=“&auxReg&;””
dbs.Execute“UPDATE SueldosTempo SET servicio=”“HrExtra(“&_
Me.nombre_completo&“”,其中id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo SET monto_servicio=“&_
Me.hrExtra&“WHERE id_gasto_detalle=“&auxReg&;”
执行“更新SueldosTempo集合fecha_gasto=“&_
auxFecha&“WHERE id_gasto_detalle=“&auxReg&;”
其他的
如果结束
其他的
如果结束
rst.MoveNext
环
星展银行,结束
设置rst=无
Set db=Nothing
端接头

我相信您可以通过更改这一行来解决您的问题:
将db=CurrentDb()
设置为
设置dbs=CurrentDb()

并将
选项Explicit
添加为模块中的第一行

dbs.close
导致错误,因为您从未分配
dbs

如果在编写此代码时启用了OptionExplicit,IDE将抛出一个编译错误,让您知道从未定义过db

编辑:


同时将
db=nothing
更改为
dbs=nothing

哪一行产生了错误?
dbs
在哪里分配?(您显示了对
db
rst
的赋值,但没有显示
dbs
,但是您重复使用
dbs。执行
。你好,肯:非常感谢您的快速响应:)。给出错误的coe行接近结尾:“dbs.close”mm。。我懂了。。所以我有一个愚蠢的事情,比如变量名不一致?O.O。。你是个很好的观察者。。我会调查的。谢谢!!始终在代码顶部包含Option Explicit。问候语:只是为了让您知道您的详细响应恰到好处。这可能看起来很简单,但不一定所有的程序员都知道。。我最深切的问候:一切圆满解决:)