0

DataAdapter を使用して Access データベース (.accdb) に書き戻す際に問題が発生しています。

現在、DataSet テーブルにデータを入力する Fill メソッドがあります。このコードは現在 Form_Load() 内にあります。

// TODO: This line of code loads data into the 'hCAliasDataSet.Topics' table.   You can move, or remove it, as needed.
this.topicsTableAdapter.Fill(this.hCAliasDataSet.Topics);

次に、cmdAdd_Click() イベントがあります。これは明らかに、hCAliasDataSet 内にある Topcis テーブルに新しい行を追加するためのものです。

// Create a new row, append it to Topics table.
DataRow DR;
DR = this.hCAliasDataSet.Tables["Topics"].NewRow();
this.hCAliasDataSet.Tables["Topics"].Rows.Add(DR); 

次に、列の値の1 つの入力をキャプチャするコードを作成しました。

        // Capture user input
        sTopicName = Interaction.InputBox("Please Enter Topic Name", "Topic Name", null, 100, 100);
        // Set the Topic value for the new Row
        DR["Topic"] = sTopicName;

私の問題は、dataAdapter を呼び出してトピック テーブルを更新する場所にあると思います。データベースを手動で確認しましたが、新しい行が作成されていませんか?

// Commit the changes back to the hCAlias DataBase (hcalias.accdb).
this.topicsTableAdapter.Update(this.hCAliasDataSet.Topics);

編集: TableAdapter の INSERT クエリを作成する必要があると思いますが、これは正しいでしょうか?

4

3 に答える 3

1

Update()メソッドは、既存のレコードを更新するだけです。新しい行を追加するには、TableAdapter Insert()メソッドを使用する必要があります。VC#はデフォルトのInsert()メソッドを作成します(オーバーロードされる可能性があります)...しかし、値を明示的に挿入できるメソッドがあります...。

例えば...

this.topicsTableAdapter.Insert(int Column1、string Column2など)

これにより、データベースに新しい行が作成され、指定した値が入力されます。

于 2011-07-14T00:48:29.743 に答える
1

アダプターは、バックグラウンドで挿入ステートメントを自動的に生成する必要があります。コードは正しいように見えますが、列の 1 つに制約があり、保存できない可能性があります。(データを指定しなかったnull不可の列のように)。ただし、挿入をキャンセルする制約があった場合、通常は例外が発生します。

これらの代替手段のいずれかを試すことができますが、基本的には同じです。

this.topicsTableAdapter.Update(this.hCAliasDataSet); this.topicsTableAdapter.Update(DR); this.topicsTableAdapter.Insert(sTopicName); // ここに他の列を追加します

于 2011-07-14T00:12:15.487 に答える
1

データセットで AcceptChanges を呼び出す必要があります。

hCAliasDataSet.AcceptChanges();

次に、TableAdapter を使用してデータベースにコミットします。

于 2011-07-14T00:12:49.310 に答える