Windows 7(64ビット)でMS Access 2003を使用しており、MySQLサーバー(5.0.51a-24 + lenny5)に外部リンクテーブルがあり、MySQL ODBCコネクタを介して接続されています(最新の5.1.11はバグがあるため、5.1.10を使用しています) . MS Access でこのテーブルを開き、いくつかのレコードを削除しようとすると、次のエラーが発生します。
あなたと別のユーザーが同じデータを同時に変更しようとしているため、Microsoft Jet エンジンはプロセスを停止しました。
テーブル内のいくつかのレコードを編集しようとすると、次のエラーが発生します。
このレコードは、編集を開始してから別のユーザーによって変更されました。レコードを保存すると、他のユーザーが行った変更が上書きされます。
変更をクリップボードにコピーすると、他のユーザーが入力した値を確認し、変更を行う場合は変更を貼り付けることができます。
ただし、MS Access で削除または更新クエリを実行すると、正常に動作します。テーブルから直接レコードを削除することはできません。
double
10 進数の値が多いフィールドがある場合に問題が発生することがわかりました (以下の詳細な分析を参照) 。見る:
CREATE TABLE `_try4` (
`a` int(11) NOT NULL default '0',
`b` double default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into _try4 values (1, NULL),(2, 4.532423),(3,10),(4,0),
(5,6.34324),(6, 8.2342398423094823);
a = 6
この問題は、最後のレコード ( )を削除または編集しようとした場合にのみ発生します。それ以外の場合は問題ありません。
問題は文書化されています:
http://support.microsoft.com/kb/280730、次の 3 つの回避策を提案しています。
- タイムスタンプ列を SQL テーブルに追加します。(その後、JET はこのフィールドのみを使用して、レコードが更新されたかどうかを確認します。)
- SQL Server のデータ型を非浮動小数点データ型 (Decimal など) に変更します。
- 更新クエリを実行してレコードを更新します。レコードセットの更新に頼るのではなく、これを行う必要があります。
ただし、これら 3 つの回避策は十分ではありません。最初にしかできませんでしたが、この回避策は機能しませんでした-予想どおり。おそらく、MS SQL Server でのみ動作します。
この問題に対する他の解決策/回避策はありますか?
追加の詳細:
- MySQL サーバーは私だけのもので、他の誰もアクセスしていません。
- 新しいレコードの挿入は正常に機能していました。
- このテーブルの主キーは適切に定義されています。
- MS Access の再起動は役に立ちませんでした。
- ODBC テーブルへのリンクを削除して再度リンクしても、解決しませんでした。
- 真新しいAccessデータベースからテーブルをリンクしても役に立ちませんでした。
- MySQL データベース エンジンを MyISAM から InnoDB に変更しても効果はありませんでした。
- 権限に問題はありません。この user@host に対するすべての権限があります。
- 通常、問題なくサーバーの MySQL コンソールからレコードを削除できます。
- MySQL Connector ODBC オプションを設定しようとしても役に立ちませんでした: 大きな結果を許可する、自動再接続を有効にする、複数のステートメントを許可する、動的カーソルを有効にする、前方専用カーソルの使用を強制する、前方専用カーソルの結果をキャッシュしない.
- MySQL ODBCコネクタでデバッグをオンにしました。
myodbc.sql
ログが作成されましたが、編集/削除時に対応するクエリが含まれていませんでした(理由はわかりません)。