いま検索のイベントの作成でどうしても検索がうまくいかず困っています。
Olacle・VB・ADO.NETを使いシステムを作成しています。
データグリッドにデータを表示させることはできるのですが検索してその検索で指定した
データに合うものを表示させることができません。
SQLを生成し次のフォームに検索の内容に合うデータを表示させようと思っています。
現在のコードは
If kcode1.SelectedItem >= kcode2.SelectedItem Then
MsgBox("指定した値は間違っています", MsgBoxStyle.OKOnly + MsgBoxStyle.Exclamation, "注意")
kcode1.Focus()
Exit Sub
End If
If Trim(kcode1.SelectedItem) <> "" And Trim(kcode2.SelectedItem) <> "" And Trim(kname.Text) <> "" And tokuiRB.Checked = True Then
strSql = "SELECT *"
strSql &= "FROM 顧客管理マスタ"
strSql &= "顧客コード WHERE BETWEEN" & Trim(kcode1.SelectedItem) & "and" & Trim(kcode2.SelectedItem) & "and "
strSql &= "顧客会社名 Like %'" & Trim(kname.Text) & "%' and"
strSql &= "顧客状況コード = 1)"
End If
If Trim(kcode1.SelectedItem) <> "" And Trim(kcode2.SelectedItem) <> "" And Trim(kname.Text) <> "" And ippanRB.Checked = True Then
strSql = "SELECT *"
strSql &= "FROM 顧客管理マスタ"
strSql &= "顧客コード WHERE BETWEEN" & kcode1.SelectedItem & "and" & kcode2.SelectedItem & "and "
strSql &= "顧客会社名 Like %'" & Trim(kname.Text) & "%' and"
strSql &= "顧客状況コード = 2)"
End If
Me.Olekken.SelectCommand.CommandText = strSql
fkmasu.Show()
Me.Hide()
としています。
実行はできるのですが検索の結果を表示させようとするとエラーがでてしまします。
エラー
演算子が型'DataRowView'および型'DataRowView'に対して有効ではありません。
というエラーがでてしましたす。
なにか解決策はないでしょうか?
パッと見、
> ... 顧客コード WHERE BETWEEN ...
じゃなくて
... WHERE 顧客コード BETWEEN ...
じゃないですか?
もう一つ。
> 顧客会社名 Like %'" & Trim(kname.Text) & "%'
じゃなくて
顧客会社名 Like '%" & Trim(kname.Text) & "%'
じゃないですか?
…あと、
>strSql &= "顧客状況コード = 1)"
の最後のカッコ")"ってどこにかかってますか?
数値以外で2文字以上をこんな書き方で通るのかなぁ???
strSql &= "顧客状況コード = '1)'"
…のような気もするけど…通ってたらごめんなさい。
SelectedItem の中身とかが分からないので、できたら
実行前のSQL文のみ載せて頂けませんか?。
ざっとしか見ていませんが、気になったよくある致命的な間違いは…
SQL文中のBETWEENやANDの直後にスペースがない箇所がいくつかあること。
ソース見てるだけではなかなか気づかないですね。
でも、ソースから判断するのではなく、
特攻隊長まるるうさんの言うように
Me.Olekken.SelectCommand.CommandText = strSql
のときのSQL文がどうなっているのかをみるのが早いですよ。
ご返事が送れてごめんなさい。
皆さんに教えて頂いた箇所を修正してstrSqlの実行した際の内容を見てみたの
ですが、
コードは
If Trim(kcode1.SelectedItem.ToString()) <> "" And Trim(kcode2.SelectedItem.ToString()) <> "" And Trim(kname.Text) <> "" Then
strSql = "SELECT *"
strSql &= " FROM 顧客管理マスタ"
strSql &= " WHERE 顧客コード BETWEEN" & Trim(kcode1.SelectedItem.ToString) & " and " & Trim(kcode2.SelectedItem.ToString) & " and "
strSql &= " 顧客会社名 Like '%" & Trim(kname.Text) & "%' and"
If tokuiRB.Checked = True Then
strSql &= " 顧客状況コード = '1'"
Else
strSql &= " 顧客状況コード = '2'"
End If
End If
になりました。
エラーは
strSql &= " WHERE 顧客コード BETWEEN" & Trim(kcode1.SelectedItem.ToString) & " and " & Trim(kcode2.SelectedItem.ToString) & " and "
ででていました。
Trim(kcode1.SelectedItem.ToStrimg)でkcode1の内容がstrSqlに格納されずにDataRowViewと入っていました。
strSqlはString型です。
何とかstrSqlにkcode1の内容を代入したいのですが何か良い方法はありませんか?
madyさんが求めたのは、
strSqlの実行した際の内容=SQL文であって、
コードを求めたわけではないと思いますが。
>strSqlの実行した際の内容=SQL文であって、
もちろんそうなのですが…
いまは、SQLがうまく動かないというレベル以前に、
特定のコントロールから値を取り出事がうまくいかないということのようですね。
単純にコントロールから値を取り出しmsgboxで表示するというコードをためし、
(それがうまくいかないはずなので)何のコントロールから値が取れないのか、
コントロール名を書いて新しく質問しなおした方がいいですよ。
あと、SQL文は直接変数を挿入しようとするんじゃなくて、
SQL="SELECT * FROM 顧客管理マスタ WHERE 顧客コード BETWEEN {0} and {1}"
SQL = String.Format(SQL, kcode1.SelectedItem.ToString, kcode2.SelectedItem.ToString)
等と、SQLを一気に書いてあとで置換するなどすると間違えにくいと思います。
ちなみに私が指摘したところはまだ間違っています…
とろさん、特攻隊長まるるうさん、madyさん、いなさん、質問に答えて頂きありがとうございました。
ComboBoxの内容をtext型で取得することで何とか検索ができるようになりました。
コードはこのようになりました。
Try
'ComboBoxの内容が不正でないかを判断する
If CInt(kcode1.Text) > CInt(kcode2.Text) Then
'メッセージボックスを表示
MsgBox("指定した値は間違っています", MsgBoxStyle.OKOnly + MsgBoxStyle.Exclamation, "注意")
kcode1.Focus()
Exit Sub
End If
'ComboBoxの内容をtextで取得
If Trim(kcode1.Text) <> "" And Trim(kcode2.Text) <> "" Then
'SQL文をstrSqlに格納する
strSql = "SELECT *"
strSql &= " FROM 顧客管理マスタ WHERE"
strSql &= " 顧客コード BETWEEN " & Trim(kcode1.Text) & " and " & Trim(kcode2.Text) & " and "
'顧客会社名が空白でないかを判断する
If kname.Text <> "" Then
strSql &= " 顧客会社名 Like '%" & Trim(kname.Text) & "%' and"
End If
'得意先か一般かを判断する
If tokuiRB.Checked = True Then
strSql &= " 顧客状況コード = '1'"
Else
strSql &= " 顧客状況コード = '2'"
End If
End If
'次のフォームを表示
fkmasu.Show()
Me.Hide()
Catch err As Exception
MsgBox("エラー", MsgBoxStyle.OKOnly, "注意")
End Try
ツイート | ![]() |