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