2

DataGridView から Access テーブルを更新する際に問題が発生しています。私を混乱させているのは、次のコードが1つのテーブルで機能し、別のテーブルでは機能しないことですが、どちらもまったく同じ構造を持っています。

テーブル

複数の(同一の)フィールドを持つ2つのテーブルがあり、主キーは "Number" と呼ばれるフィールドです。このフィールドは自動インクリメントであり、両方のテーブルで重複することなくインデックスが作成されます。そのため、同時実行違反の原因として主キーの欠如について読みましたが、ここでは問題ではないようです。

コード

これが私のコードの関連部分です。

初期化

BindingSource BS = new BindingSource();
DbDataAdapter adapter;
DataTable table = new DataTable();
OdbcCommand command = new OdbcCommand(query, odbcConnection);
OdbcDataAdapter adapter = new OdbcDataAdapter(command);
adapter.AcceptChangesDuringUpdate = true; // Attempt to fix the issue
adapter.AcceptChangesDuringFill = true; // same
DbCommandBuilder commandBuilder = new OdbcCommandBuilder(adapter);
dgv.DataSource = BS;
BS.DataSource = table;
adapter.Fill(table);

変更を保存する

OdbcCommandBuilder builder = new OdbcCommandBuilder((OdbcDataAdapter)adapter);
adapter.UpdateCommand = builder.GetUpdateCommand(); // Fix attempt
adapter.Update(table); // Where the exception is thrown

私の問題は、使用するデータベースに応じて非常にランダムに発生することを考えると、データベースに関連していると思いますが、それらは同じ構造であり、両方とも使用されていない (ローカル ドライブにコピーされている) ため、何が起こっているのかわかりません。

4

2 に答える 2

0

おそらく、他のテーブルにリレーションシップが定義されているため、特定のフィールドの更新が妨げられている可能性があります。

また、テーブルには、データの有効性をチェックするためのインデックスまたは式が含まれている場合があり、テーブルの更新が妨げられます。

これらの可能性を確認しましたか?

于 2012-09-04T11:19:42.980 に答える
0

そこで、Odbc の代わりに OleDb を使用するように企業クラスを変更しました。コードは、になるとなるDataGridView以外は、まったく同じままです。OdbcCommandOleDbCommandOdbcDataAdapterOleDbDataAdapter

于 2012-09-05T07:59:04.237 に答える