- - PR -
元となるSQL文に、SQL文を追加したい
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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文を追加できる様にしたいのですが 何が問題なのでしょうか。 | ||||||||||||||||
|
投稿日時: 2007-03-10 12:34
DataView クラスのそのコンストラクタにある第 2 引数は RowFilter であるのに、 SQL 文の WHERE 句を書こうとしていることが問題になっています。 RowFilter プロパティで使える Expression (式) に従うように書きましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-03-10 13:19
うまく行かない理由は、じゃんぬねっとさんが書かれた通りです。
ですので "定価>320" と書けばいいと思うのですが、 何か "WHERE 定価>320" と書かなければいけない理由でもあるのでしょうか? | ||||||||||||||||
|
投稿日時: 2007-03-10 13:56
ちょっと言い方を変えてみます。
であるのに、
という発想になるのが、理に適っていないように思えます。 それと、条件も "定価>=320" から "WHERE 定価>320" と、微妙に変わっています。(320 を含む / 含まない) 変更したいのは RowFilter | SQL どちらなのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 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 ということになるのでしょうか? つまりこの書き方自体が間違っているということでしょうか? | ||||||||||||||||
|
投稿日時: 2007-03-10 16:00
これのどこがどう "変更" になっているのかが、わからないです。 例だとしても、同じ条件を引き合いに出すと当人以外の人は混乱すると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-03-10 18:20
SQLはデータベースからデータを取得するためのもので、
DataViewのRowFilterはDataTableに取得したデータを さらに絞り込んで処理するために使用するためのものです。 ですので、「定価>320」という書き方は同じですが、意味は全く違います。
この表現の意味がわかりません。 行いたい処理についてお聞きしますが、 (1) 最初は全データを読み込んで、その後何らかのタイミングで 「定価>320」で絞り込んで処理したい。 (2) 最初から「定価>320」のレコードだけを処理したい。 の、どっちなんでしょうか? (1)なら、そのタイミングでRowFilterに "定価>320" を設定します。 (2)なら最初にFillするSQLを "SELECT * FROM 商品 WHERE 定価>320" にします。 |
1