C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Accessの主キーを除く更新


(過去ログ 17 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■6610 / inTopicNo.1)  Accessの主キーを除く更新
  
□投稿者/ hyzyo (1回)-(2007/08/20(Mon) 16:19:39)

分類:[C#] 

現在、AccessのデータをOleDbDataAdapterで取得し、DataSetに取得させ、DataGridViewに表示させています。
次に、Accessのデータを更新するため、DataRowにTextBoxの値を代入し、DataSetに入力しております。
DataSetに入力した値をOleDbDataAdapterでUpdateをすると、新規登録は問題無く出来るのですが、更新させようとすると、
「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。」
というエラーが表示されます。

エラーの内容通り、主キーの設定をしているレコードも更新しようと値を入力していることがエラーの原因とわかっているのですが、主キーの設定をしているレコードに値を入力させないようにコメントアウトをすると、
「インデックスまたは主キーには、Null 値を使用できません。」
というエラーが表示されます。

主キー以外のレコードを更新したいのですが、何か良い方法はないでしょうか。
ご教示お願いします。
引用返信 編集キー/
■6614 / inTopicNo.2)  Re[1]: Accessの主キーを除く更新
□投稿者/ はつね (232回)-(2007/08/20(Mon) 17:55:09)
No6610 (hyzyo さん) に返信
> 現在、AccessのデータをOleDbDataAdapterで取得し、DataSetに取得させ、DataGridViewに表示させています。
> 次に、Accessのデータを更新するため、DataRowにTextBoxの値を代入し、DataSetに入力しております。
> DataSetに入力した値をOleDbDataAdapterでUpdateをすると、新規登録は問題無く出来るのですが、更新させようとすると、

OleDbDataAdapterのUpdateCommandにはどのようなSQL文を設定しているのでしょうか。
もし、CommandBuilderにて設定しているのであれば、DataSetに取得したときにDataSetの該当テーブルに主キーは貼られていますか。

引用返信 編集キー/
■6651 / inTopicNo.3)  Re[2]: Accessの主キーを除く更新
□投稿者/ hyzyo (2回)-(2007/08/21(Tue) 14:40:07)
はつねさん、回答ありがとうございます。

> OleDbDataAdapterのUpdateCommandにはどのようなSQL文を設定しているのでしょうか。
> もし、CommandBuilderにて設定しているのであれば、DataSetに取得したときにDataSetの該当テーブル
>に主キーは貼られていますか。
ConnmandBuilderで設定しているのですが、主キーの設定をしておりませんでした。
そこで主キーの設定をいれて下記の様に作成したのですが、主キーに設定した箇所の内容が、
「System.Data.DataRow」とDBに反映され、更新が上手くいきません。
原因が分からないので、教えてもらえないでしょうか。
よろしくお願いします。

OleDbDataAdapter Da = new OleDbDataAdapter("SELECT * FROM テーブル1", Conn);

DataSet Ds = new DataSet();

OleDbCommandBuilder Cb = new OleDbCommandBuilder(Da);

Da.Fill(Ds,"テーブル1");

DataRow Dr;

Ds.Tables["テーブル1"].PrimaryKey = new DataColumn[] {Ds.Tables["テーブル1"].Columns["ID"]};

Dr = Ds.Tables["テーブル1"].NewRow();

Dr["ID"] = Ds.Tables["テーブル1"].Rows.Find(ID.Text);
Dr["名前"] = name.Text;
Dr["表示"] = 0;

Ds.Tables["テーブル1"].Rows.Add(Dr);

Da.Update(Ds,"テーブル1");

Conn.Close();

dataGridView1.DataSource = Ds.Tables[0];
引用返信 編集キー/
■6665 / inTopicNo.4)  Re[3]: Accessの主キーを除く更新
□投稿者/ hyzyo (3回)-(2007/08/21(Tue) 18:24:15)
No6651 (hyzyo さん) に返信
> はつねさん、回答ありがとうございます。
>
>>OleDbDataAdapterのUpdateCommandにはどのようなSQL文を設定しているのでしょうか。
>>もし、CommandBuilderにて設定しているのであれば、DataSetに取得したときにDataSetの該当テーブル
> >に主キーは貼られていますか。
> ConnmandBuilderで設定しているのですが、主キーの設定をしておりませんでした。
> そこで主キーの設定をいれて下記の様に作成したのですが、主キーに設定した箇所の内容が、
> 「System.Data.DataRow」とDBに反映され、更新が上手くいきません。
> 原因が分からないので、教えてもらえないでしょうか。
> よろしくお願いします。
>
> OleDbDataAdapter Da = new OleDbDataAdapter("SELECT * FROM テーブル1", Conn);
>
> DataSet Ds = new DataSet();
>
> OleDbCommandBuilder Cb = new OleDbCommandBuilder(Da);
>
> Da.Fill(Ds,"テーブル1");
>
> DataRow Dr;
>
> Ds.Tables["テーブル1"].PrimaryKey = new DataColumn[] {Ds.Tables["テーブル1"].Columns["ID"]};
>
> Dr = Ds.Tables["テーブル1"].NewRow();
>
> Dr["ID"] = Ds.Tables["テーブル1"].Rows.Find(ID.Text);
> Dr["名前"] = name.Text;
> Dr["表示"] = 0;
>
> Ds.Tables["テーブル1"].Rows.Add(Dr);
>
> Da.Update(Ds,"テーブル1");
>
> Conn.Close();
>
> dataGridView1.DataSource = Ds.Tables[0];
解決済み
引用返信 編集キー/
■6666 / inTopicNo.5)  Re[4]: Accessの主キーを除く更新
□投稿者/ Zee (15回)-(2007/08/21(Tue) 18:49:27)
Zee さんの Web サイト
FillでもUpdateが走ると思いますけども。
Fillのメソッドをもう一度ヘルプで参照した方がいいと思います。
引用返信 編集キー/
■6673 / inTopicNo.6)  Re[3]: Accessの主キーを除く更新
□投稿者/ はつね (234回)-(2007/08/21(Tue) 21:19:12)
No6651 (hyzyo さん) に返信
> ConnmandBuilderで設定しているのですが、主キーの設定をしておりませんでした。
> そこで主キーの設定をいれて下記の様に作成したのですが、主キーに設定した箇所の内容が、
> 「System.Data.DataRow」とDBに反映され、更新が上手くいきません。

解決なの?
まあ、DataSetにNewRowしているのですから、更新ではなく追加になるとは思いますけれど。

解決済み
引用返信 編集キー/
■6674 / inTopicNo.7)  Re[5]: Accessの主キーを除く更新
□投稿者/ はつね (235回)-(2007/08/21(Tue) 21:25:31)
No6666 (Zee さん) に返信
> FillでもUpdateが走ると思いますけども。
> Fillのメソッドをもう一度ヘルプで参照した方がいいと思います。

FillでもUpdateが走るというのは少々語弊があるように思います。
FillメソッドではDataSetへの追加や更新は行われますが、(この場合は)Accessに対するUpdateは走りません。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -