Vba访问错误91

时间:2017-06-06 17:51:46

标签: sql vba ms-access

我尝试运行此代码

Public Sub Production_UpdateStatus(ByVal lngProductionId As Long, _
                                   ByVal NewProductionStatus As eProductionStatus)    
Dim oDb As DAO.Database
Dim oRst As DAO.Recordset
Dim StrSql As String
Dim strProductionStatus As String

On Error GoTo Err_Infos

GetCurrentProductionStatusString NewProductionStatus, strProductionStatus

Set oDb = CurrentDb

'Mise a jour du staut de production
StrSql = "UPDATE tProduction SET tProduction.Statut= '" & strProductionStatus & "'" _
           & " WHERE (tProduction.IdProduction=" & lngProductionId & ");"
oDb.Execute StrSql

'Fermeture des connexions
oRst.Close
oDb.Close
Set oDb = Nothing
Set oRst = Nothing

Exit_currentSub:
    Exit Sub

Err_Infos:
    MsgBox "Erreur #" & Err.Number & " : " & Err.Description
    Resume Exit_currentSub

End Sub

此代码有效但给我错误91.

  

对象变量或未设置块变量

它生成以下SQL查询:

UPDATE tProduction SET tProduction.Statut= 'Nouvelle' WHERE (tProduction.IdProduction=2);

当我测试直接查询时,我没有任何错误。你能帮我消除这个错误吗?

由于

2 个答案:

答案 0 :(得分:3)

您正在关闭一个永远不会使用oRst初始化的记录集对象Set。因为您运行操作查询,所以您不需要记录集,并且它可能已经从先前的代码版本中徘徊。

在同一个注释中,因为您要将文字值传递给SQL查询,请考虑使用DAO QueryDef parameters进行参数化,以避免连接和引用封装:

Dim oDb As DAO.Database, qdef As DAO.QueryDef
Dim StrSql As String, strProductionStatus As String

GetCurrentProductionStatusString NewProductionStatus, strProductionStatus

Set oDb = CurrentDb

StrSql = "PARAMETERS strProductionStatusParam Text(255), lngProductionIdParam Long;" _
           & " UPDATE tProduction SET tProduction.Statut = [strProductionStatusParam]" _
           & " WHERE (tProduction.IdProduction = [lngProductionIdParam]);"

Set qdef = oDb.CreateQueryDef("", StrSql)

qdef!strProductionStatusParam = strProductionStatus
qdef!lngProductionIdParam = lngProductionId

qdef.Execute dbFailOnError

Set qdef = Nothing
Set oDb = Nothing

答案 1 :(得分:1)

尝试删除与oRst相关的代码行。此变量未初始化且未使用。