- - PR -
DataViewでソートした結果をDBに反映させる方法について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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ファイルには"コード"に主キーが設定してあります。 どうしたらデービューでソートをした結果を元のデータベースに反映することが できるでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-01-09 22:29
何をしたいのか分からないのですが、仮にそれを正常に行えたとして DB の状態が何か変わりますか?
_________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2007-01-10 06:18
主キー(PrimaryKey)ではなく、テーブルに「SortOrder」フィールドを追加して 並べ替えてください。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||||||
|
投稿日時: 2007-01-10 08:46
RDBって順序は保障されないですよ
取り出す時にorder byするか取り出した後にsortしてください # それともAccessは特別?? | ||||||||
|
投稿日時: 2007-01-10 08:50
レコードの並び順を保存するという考え方は正しくありません。 必要とするデータを取得したものを、その都度、必要に応じて並べ替えるものだと思ってください。 もし、常にコードで並んだ状態をデータベース側に覚えさせておいて、高速にアクセスしたいと思うなら、コードをインデックスとしてデータベース側で登録するという考え方になります。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2007-01-10 21:45
それでも、取り出すときに ORDER BY しなければ、順序は保障されません。 _________________ | ||||||||
|
投稿日時: 2007-01-10 22:01
http://support.microsoft.com/kb/834927/ja primaryキーを設定すれば、結果として順序は保障されるみたいですよ。 | ||||||||
|
投稿日時: 2007-01-11 03:07
囚人様、Access様、Kazuki様、R・田中一郎様、Jitta様、dodo様、
早速レスを頂きありがとうございました。 このようにすばやいお答えに驚きました。 私のデータベースに対する勘違いが分かりしました。 データベースとは、並び順には特に意味はないデータの塊なのですね。 それを取り出す時にその時の必要に応じてソートしたりフィルタをかけたりする ということですね。 ありがとうございました。 これからも精進したいと思います。 |