5

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 で削除または更新クエリを実行すると、正常に動作します。テーブルから直接レコードを削除することはできません。

double10 進数の値が多いフィールドがある場合に問題が発生することがわかりました (以下の詳細な分析を参照) 。見る:

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ログが作成されましたが、編集/削除時に対応するクエリが含まれていませんでした(理由はわかりません)。
4

3 に答える 3

2

リンクされたテーブルの構造についての詳細は役に立ちますが、私は推測を危険にさらします.

MS Access 2003 と 2010 の両方で、SQL Server リンク テーブルに null 許容ブール フィールドを含めたときに、同様の問題が発生しました。JET データベースには、null 可能な nit フィールドに問題があるようです。詳細については、この回答をご覧ください: https://stackoverflow.com/a/4765810/1428147

ブール値フィールドをnull不可にし、デフォルト値を設定することで問題を解決しました。問題が私のものと同じであるが、MySQL を使用している場合は、同じことを試してください。

于 2013-01-19T12:50:51.440 に答える