- PR -

元となるSQL文に、SQL文を追加したい

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/10/21
投稿数: 13
投稿日時: 2007-03-10 12:23
現在VB2005で
DataGridViewにDBから特定のレコードを表示しています。

'データセットに取得する
dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn)
dAdp.Fill(dSet, "商品")

'表示するレコードをDataViewに取得し、DataGridViewに関連付ける
dView = New DataView(dSet.Tables("商品"), "定価>=320", "", DataViewRowState.CurrentRows)
DataGridView1.DataSource = dView


この状態ではきちんと表示できるのですが、
"定価>320" の部分を "WHERE 定価>320"

の様にSQL文に書き換えると
「構文エラー : '定価' 演算子の後にオペランドがありません。」
となりエラーとなります。

"SELECT * FROM 商品" のあとに "WHERE 定価>320" のSQL文を追加できる様にしたいのですが
何が問題なのでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-10 12:34
引用:

未記入さんの書き込み (2007-03-10 12:23) より:

"SELECT * FROM 商品" のあとに "WHERE 定価>320" のSQL文を追加できる様にしたいのですが
何が問題なのでしょうか。


DataView クラスのそのコンストラクタにある第 2 引数は RowFilter であるのに、
SQL 文の WHERE 句を書こうとしていることが問題になっています。

RowFilter プロパティで使える Expression (式) に従うように書きましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-03-10 13:19
うまく行かない理由は、じゃんぬねっとさんが書かれた通りです。

ですので "定価>320" と書けばいいと思うのですが、
何か "WHERE 定価>320" と書かなければいけない理由でもあるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-10 13:56
ちょっと言い方を変えてみます。

引用:

未記入さんの書き込み (2007-03-10 12:23) より:

dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn)

引用:

"SELECT * FROM 商品" のあとに "WHERE 定価>320" のSQL文を追加できる様にしたい


であるのに、

引用:

dView = New DataView(dSet.Tables("商品"), "定価>=320", "", DataViewRowState.CurrentRows)

引用:

"定価>320" の部分を "WHERE 定価>320" の様にSQL文に書き換える


という発想になるのが、理に適っていないように思えます。

それと、条件も "定価>=320" から "WHERE 定価>320" と、微妙に変わっています。(320 を含む / 含まない)

変更したいのは RowFilter | SQL どちらなのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2006/10/21
投稿数: 13
投稿日時: 2007-03-10 15:25
KIさんじゃんぬねっとさん返答ありがとうございます。まず

dView = New DataView(dSet.Tables("商品"), "定価>=320", "", DataViewRowState.CurrentRows)

は私のコピペミスです。

dView = New DataView(dSet.Tables("商品"), "定価>320", "", DataViewRowState.CurrentRows)

こうですね。申し訳ありませんでした。




KIさんがおっしゃる理由ですが、実際は仕事の都合で
もう少し複雑なSQL文を当てはめておりますので、簡略化しただけです。
実際に当てはめているSQL文を "WHERE 定価>320" から "定価>320" のように変更する方法が
わからなかったものですので、SQL文を追加できる様にしたいのです。


じゃんぬねっとさんがおっしゃる
「変更したいのは RowFilter | SQL どちらなのでしょうか? 」
ですが、私がしたいことは

"SELECT * FROM 商品" のあとに "WHERE 定価>320" のSQL文を追加できる様にしたい

ですので変更するのは RowFilter ということになるのでしょうか?
つまりこの書き方自体が間違っているということでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-10 16:00
引用:

未記入さんの書き込み (2007-03-10 15:25) より:

実際に当てはめているSQL文を "WHERE 定価>320" から "定価>320" のように変更する方法がわからなかったものですので、SQL文を追加できる様にしたいのです。


これのどこがどう "変更" になっているのかが、わからないです。
例だとしても、同じ条件を引き合いに出すと当人以外の人は混乱すると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-03-10 18:20
SQLはデータベースからデータを取得するためのもので、
DataViewのRowFilterはDataTableに取得したデータを
さらに絞り込んで処理するために使用するためのものです。
ですので、「定価>320」という書き方は同じですが、意味は全く違います。

引用:

"SELECT * FROM 商品" のあとに "WHERE 定価>320" のSQL文を追加できる様にしたい



この表現の意味がわかりません。
行いたい処理についてお聞きしますが、

 (1) 最初は全データを読み込んで、その後何らかのタイミングで
  「定価>320」で絞り込んで処理したい。

 (2) 最初から「定価>320」のレコードだけを処理したい。

の、どっちなんでしょうか?

(1)なら、そのタイミングでRowFilterに "定価>320" を設定します。

(2)なら最初にFillするSQLを "SELECT * FROM 商品 WHERE 定価>320" にします。
1

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