2

MS Access 2007-2010で作成されたアプリケーションがあり、バックエンドはSQLデータベースです。

新しいデータベースを構築した後、AccessレポートでSQLのレコードを表示すると、実行時エラー3197で新しい入力結果を編集または入力しようとしました。

特定のエラーは次のように述べています:このレコードは、編集を開始してから別のユーザーによって変更されました

次に、[クリップボードにコピー]オプションと[変更をドロップ]オプションがありますが、[レコードの保存]はグレー表示されています。ドロップ変更をクリックすると、エラーが発生します。

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

次に、SQLを調べ、EXEC sp_who2'Active'を使用してデータベースにクエリを実行しました。SQLに使用するユーザー名はRUNNABLEであり、Accessアプリケーション(Access VBAでコード化)で使用されるユーザーはSUSPENDED(コマンドit SELECTで中断されます)。

同じように構築され、問題なく動作する他のデータベースがあります。Accessで実行されているときに動作中のデータベースでsp_who2を確認しましたが、「問題のある」データベースでSUSPENDEDされているユーザーは、このデータベースでスリープしています。

両方のデータベースのアクセス許可を確認し、[セキュリティ]-> [ログイン]でユーザーのアクセス許可を確認しましたが、問題としてフラグを立てることができるものは何も表示されません(おそらく他の誰かができますか?)。

これが発生している理由と、データベースがSQLユーザーによってロックされており、Accessユーザーが関連するレコードを更新できない理由がわかりません。

誰かがこの問題に光を当てることができますか?

ありがとう。

4

3 に答える 3

4

Remouがコメントしたように、すべてのビットデータ型をsmallintに変更し、Nullを使用して0を入力します。チェックされていない(= 0)の初期状態にあるフィールドとして、1を-1に変更する必要はありませんでした。

于 2012-08-02T07:07:10.797 に答える
0

提案されたように、ビットデータ型がnullから0になっているフィールドのデータを更新し、データ型もintに変更しました。これで問題は解決しました。

于 2017-10-02T20:49:55.477 に答える
0

私は同じ問題を抱えていました、

    sql2 = "Select * from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

.updateでスタックしました。私はそれを次のように変更しました:

    sql2 = "Select Verwerkt, Printdatum from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

これ以上のトラブルは発生しませんでした。これが他の人に役立つことを願っています。

于 2021-03-23T10:18:11.353 に答える