我有一个Access应用程序,它使用SQLServer 2008 R2作为数据库。
当我尝试更新单个记录时,我收到此错误:
“3179微软Jet数据库引擎因为你而停止了这个过程 而另一个用户正在尝试同时更改相同的数据 时间“
此错误仅附加在此特定记录(以及其他一些记录)上,并在每次尝试更新时附加。 应用程序(和db)作为单个用户运行,我没有一个同时运行的线程更新相同的记录
我在尝试的每台机器上都出现此错误,因此它与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!
非常感谢
答案 0 :(得分:0)
检查SQL Server中的表是否有任何基于您的更新更新记录的触发器。这似乎是MS Access,因为另一个用户已更新记录。如果您的SQL Server表特别在触发器中有TIMESTAMP,请小心。
答案 1 :(得分: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