0

SQLServer 2008 R2 をデータベースとして使用する Access アプリケーションがあります。

単一のレコードを更新しようとすると、次のエラーが発生します。

「3179 あなたと別のユーザーが同じデータを同時に変更しようとしているため、Microsoft Jet データベース エンジンがプロセスを停止しました」

このエラーは、この特定のレコード (および他のいくつか) にのみ追加され、更新しようとするたびに追加されます。アプリケーション(およびデータベース)は単一のユーザーとして実行され、同時に実行されているスレッドが同じレコードを更新していません

ここに画像の説明を入力

試したすべてのマシンでこのエラーが発生するため、SQLServer とは関係ありません。

EDIT
SQL Serverでレコードを直接更新しようとしましたが、問題ありません。更新しても問題ありません。

問題は、Microsoft Access から 4 つのテキスト フィールド (es.Note) の 1 つを更新するときに発生することがわかりました。

以下のスクリプトを実行すると、特定のレコード (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

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 に答える
0

SQL Server のテーブルに、更新に基づいてレコードを更新するトリガーがあるかどうかを確認してください。これは、別のユーザーがレコードを更新したため、MS Access に表示されます。SQL Server テーブルの特にトリガーに TIMESTAMP がある場合は注意してください。

于 2012-06-15T10:56:27.633 に答える