- PR -

DataViewでソートした結果をDBに反映させる方法について

投稿者投稿内容
vb2c#
会議室デビュー日: 2006/09/23
投稿数: 4
投稿日時: 2007-01-09 22:09
データセットdataSetにAccessファイルを読み込んで、データビューを使って
"コード"列でソートをした結果を元のデータセットに格納して、データベース
に反映させ更新しようと思います。

プログラムは次の通りです。

OleDbCommandBuilder cb = new OleDbCommandBuilder(da);

DataView dv = new DataView(dataSet.Tables[0]);
dv.Sort = "コード";

for (int row = 0; row < dv.Count; row++)
{
for (int column = 0; column < dv.Table.Columns.Count; column++)
{
dataSet.Tables[0].Rows[row][column] = dv[row][column];
}
}

da.Update(dataSet, fileTitle);

ところが実行時エラーが起きてしまいます。
エラーメッセージは以下の通りです。

「インデックス、主キー、またはリレーションシップで値が重複している
ので、テーブルを変更できませんでした。重複する値のあるフィールド
の値を変更するか、インデックスを削除してください。または重複する
値を使用できるように再定義してください。」

Accessファイルには"コード"に主キーが設定してあります。
どうしたらデービューでソートをした結果を元のデータベースに反映することが
できるでしょうか?

よろしくお願いいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-01-09 22:29
何をしたいのか分からないのですが、仮にそれを正常に行えたとして DB の状態が何か変わりますか?
_________________
囚人のジレンマな日々
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-01-10 06:18
引用:

Accessファイルには"コード"に主キーが設定してあります。
どうしたらデービューでソートをした結果を元のデータベースに反映することが
できるでしょうか?


主キー(PrimaryKey)ではなく、テーブルに「SortOrder」フィールドを追加して
並べ替えてください。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2007-01-10 08:46
RDBって順序は保障されないですよ
取り出す時にorder byするか取り出した後にsortしてください

# それともAccessは特別??
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-01-10 08:50
引用:

vb2c#さんの書き込み (2007-01-09 22:09) より:

どうしたらデービューでソートをした結果を元のデータベースに反映することが
できるでしょうか?


レコードの並び順を保存するという考え方は正しくありません。
必要とするデータを取得したものを、その都度、必要に応じて並べ替えるものだと思ってください。

もし、常にコードで並んだ状態をデータベース側に覚えさせておいて、高速にアクセスしたいと思うなら、コードをインデックスとしてデータベース側で登録するという考え方になります。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-10 21:45
引用:

R・田中一郎さんの書き込み (2007-01-10 08:50) より:
引用:

vb2c#さんの書き込み (2007-01-09 22:09) より:

どうしたらデービューでソートをした結果を元のデータベースに反映することが
できるでしょうか?


レコードの並び順を保存するという考え方は正しくありません。
必要とするデータを取得したものを、その都度、必要に応じて並べ替えるものだと思ってください。

もし、常にコードで並んだ状態をデータベース側に覚えさせておいて、高速にアクセスしたいと思うなら、コードをインデックスとしてデータベース側で登録するという考え方になります。



それでも、取り出すときに ORDER BY しなければ、順序は保障されません。
_________________
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2007-01-10 22:01
引用:

Jittaさんの書き込み (2007-01-10 21:45) より:

それでも、取り出すときに ORDER BY しなければ、順序は保障されません。



http://support.microsoft.com/kb/834927/ja

primaryキーを設定すれば、結果として順序は保障されるみたいですよ。
vb2c#
会議室デビュー日: 2006/09/23
投稿数: 4
投稿日時: 2007-01-11 03:07
囚人様、Access様、Kazuki様、R・田中一郎様、Jitta様、dodo様、
早速レスを頂きありがとうございました。
このようにすばやいお答えに驚きました。

私のデータベースに対する勘違いが分かりしました。
データベースとは、並び順には特に意味はないデータの塊なのですね。
それを取り出す時にその時の必要に応じてソートしたりフィルタをかけたりする
ということですね。

ありがとうございました。
これからも精進したいと思います。

スキルアップ/キャリアアップ(JOB@IT)