- PR -

クエリしたデータをDataGridで更新する方法

1
投稿者投稿内容
たにくん
会議室デビュー日: 2005/01/19
投稿数: 19
投稿日時: 2005-02-08 15:32
環境です。
VB.NET2003 Windowsアプリ
OLE DB プロバイダ: Jet 4.0 OLE DB Provider
データベース:  Access2000

お世話になります。

DataGridを使ってクエリを更新出来るようにする方法が分かりません。

レコード1          レコード2
商品No  名称        商品No   購入日
 001  トマト        003     1/15
 002  にんじん       001     1/20
 003  レタス        002     1/30
 004  きゅうり       001     2/1


VB.netの「データアダプタ構成ウィザード」を使って
クエリ ビルダでテーブルを追加・関連づけて
DataGrid上で下記のように表示させます。

商品名称  購入日
レタス   1/15
トマト   1/20
にんじん  1/30
トマト   2/1

DataGrid上で購入日を更新したいのですが、更新がうまく行きません。

ウィザードの過程の際に

UPDATEステートメントは生成されました。
!元のクエリには、複数のテーブルの列を含む、SELECT一覧が指定されています。この種類のクエリに対しては、ステートメントは自動生成されません。

と表示されて、これが原因だと考えています。

自分で解決できず、お力を借りたく投稿させて頂きました。
参考書籍やサイト、ヒントをいただければ幸いかと思います。
よろしくお願い致します。

[ メッセージ編集済み 編集者: たにくん 編集日時 2005-02-08 15:36 ]
Milan
常連さん
会議室デビュー日: 2005/01/05
投稿数: 33
投稿日時: 2005-02-08 16:14
こんにちは。

自動生成出来なかったデータアダプタの
UpdateCommandプロパティを自分で記述すればいいと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-08 22:02
 とっても重要なことです。用語は、広く通用するものを使いましょう。

誤:レコード1
正:テーブル1

誤:クエリを更新できるように
正:データを更新できるように


 それで、問題の更新がうまくいかない理由ですが、メッセージのとおりです。
『複数のテーブルの列を含む、SELECT一覧が指定されています。この種類のクエリに対しては、ステートメントは自動生成されません。』
自動生成できるのは、単一テーブルからの引用のみです。このケースでは、テーブル1(商品Noと名称)とテーブル2(商品Noと購入日)の2つのテーブルからSELCTしているため、自動生成ではどの列がどのテーブルのどの列に対応するかがわからないのです。
 ですから、自分で構成しましょう。
 その他、自動生成には頼るべきではありません。効率の悪いSQL文が生成されます。

UPDATE テーブル2 SET 購入日=? WHERE 商品No = (SELECT 商品No FROM テーブル1 WHERE 名称 = ?)
パラメータの設定も必要です。

_________________
たにくん
会議室デビュー日: 2005/01/19
投稿数: 19
投稿日時: 2005-02-09 13:15
返事が遅れて申し訳ありません。

ありがとうございます。
用語の使い方には以後注意します。

どうしてもソフトに頼ろうとするところがあるみたいで。。
自分で生成する方法しかないようなので、勉強して出直したいと思います。

まずはSQLから勉強を。。

とても助かりました。

Milan様、Jitta様ありがとうございました。
1

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