0

我有一个使用 SQLServer 2008 R2 作为数据库的 Access 应用程序。

当我尝试更新单个记录时,我收到此错误:

“3179 microsoft Jet 数据库引擎停止了进程,因为您和另一个用户正试图同时更改相同的数据”

此错误仅附加在此特定记录(和其他一些记录)上,并在我每次尝试更新时附加。应用程序(和数据库)作为单个用户运行,我没有同时运行的线程更新相同的记录

在此处输入图像描述

我在我尝试的每台机器上都收到此错误,因此它不应该与 SQLServer 相关。

编辑
我尝试在 SQL Server 中直接更新记录,没问题,更新没问题。

我发现问题是当我从 Microsoft 访问更新四个文本字段(es.Note)之一时。

当我运行下面的脚本时,我只对特定记录(Cod_stabile=6600015)有错误,其他记录没有问题。更新其他字段没关系,只有文本字段出现错误。

Dim rs as DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb

. . .

StrSql = "SELECT St_Stabili.* FROM St_Stabili WHERE (St_Stabili.Cod_Stabile='6600015') ;"
Set rs = db.OpenRecordset(StrSql)
rs.Edit
rs!Note = '-'
rs.update  <- error


. . .

StrSql = "SELECT St_Stabili.* FROM St_Stabili WHERE (St_Stabili.Cod_Stabile='6600016') ;"
Set rs = db.OpenRecordset(StrSql)
rs.Edit
rs!Note = '-'
rs.update  <- OK!

非常感谢你

4

2 回答 2

0

检查 SQL Server 中的表是否有任何触发器根据您的更新更新记录。这对 MS Access 来说似乎是另一个用户更新了记录。如果您的 SQL Server 表有 TIMESTAMP,尤其是在触发器中,请小心。

于 2012-06-15T10:56:27.633 回答
0

我解决了更改用于更新 TEXT 字段的方法:

Dim UpdCommand As ADODB.command
    Set UpdCommand = New ADODB.command
    With UpdCommand
        .ActiveConnection = CurrentProject.Connection
        .CommandType = adCmdText
        .CommandText = "UPDATE St_Stabili SET NoteStabile= ?" _
                                      & ",NoteGenerali = ?" _
                                      & ",NoteConteggio = ?" _
                                      & ",NoteAmministratori = ?" _
                & " WHERE St_Stabili.Cod_Stabile = ?;"

        .Parameters.Append .CreateParameter("NotaSt", adVarChar, adParamInput, 300, Me!NoteStabile_x)
        .Parameters.Append .CreateParameter("NotaGen", adVarChar, adParamInput, 300, Me!NoteGenerali_x)
        .Parameters.Append .CreateParameter("NotaCon", adVarChar, adParamInput, 300, Me!NoteConteggio_x)
        .Parameters.Append .CreateParameter("NotaAmm", adVarChar, adParamInput, 300, Me!NoteAmministratori_x)
        .Parameters.Append .CreateParameter("Cod_Stabile", adVarChar, adParamInput, 15, Me!Cod_Stabile_x)
    End With

UpdCommand.Execute
于 2012-06-18T05:46:47.500 回答