検索について

解決


VBSS  2003-12-15 22:52:40  No: 110721

いま検索のイベントの作成でどうしても検索がうまくいかず困っています。
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'に対して有効ではありません。
というエラーがでてしましたす。
なにか解決策はないでしょうか?


とろ  2003-12-16 01:00:17  No: 110722

パッと見、

> ... 顧客コード WHERE BETWEEN ...

じゃなくて

... WHERE 顧客コード BETWEEN ...

じゃないですか?


とろ  2003-12-16 01:01:44  No: 110723

もう一つ。

> 顧客会社名 Like %'" & Trim(kname.Text) & "%'

じゃなくて

顧客会社名 Like '%" & Trim(kname.Text) & "%'

じゃないですか?


特攻隊長まるるう  2003-12-16 10:04:49  No: 110724

…あと、

>strSql &= "顧客状況コード = 1)"

の最後のカッコ")"ってどこにかかってますか?
数値以外で2文字以上をこんな書き方で通るのかなぁ???

strSql &= "顧客状況コード = '1)'"

…のような気もするけど…通ってたらごめんなさい。
SelectedItem の中身とかが分からないので、できたら
実行前のSQL文のみ載せて頂けませんか?。


mady  2003-12-17 02:33:58  No: 110725

ざっとしか見ていませんが、気になったよくある致命的な間違いは…
SQL文中のBETWEENやANDの直後にスペースがない箇所がいくつかあること。
ソース見てるだけではなかなか気づかないですね。

でも、ソースから判断するのではなく、
特攻隊長まるるうさんの言うように
Me.Olekken.SelectCommand.CommandText = strSql
のときのSQL文がどうなっているのかをみるのが早いですよ。


VBSS  2003-12-17 23:06:47  No: 110726

ご返事が送れてごめんなさい。
皆さんに教えて頂いた箇所を修正して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の内容を代入したいのですが何か良い方法はありませんか?


いな  2003-12-18 03:42:21  No: 110727

madyさんが求めたのは、
strSqlの実行した際の内容=SQL文であって、
コードを求めたわけではないと思いますが。


mady  2003-12-18 18:51:55  No: 110728

>strSqlの実行した際の内容=SQL文であって、
もちろんそうなのですが…

いまは、SQLがうまく動かないというレベル以前に、
特定のコントロールから値を取り出事がうまくいかないということのようですね。

単純にコントロールから値を取り出しmsgboxで表示するというコードをためし、
(それがうまくいかないはずなので)何のコントロールから値が取れないのか、
コントロール名を書いて新しく質問しなおした方がいいですよ。

あと、SQL文は直接変数を挿入しようとするんじゃなくて、
SQL="SELECT * FROM 顧客管理マスタ WHERE 顧客コード BETWEEN {0} and {1}"
SQL = String.Format(SQL, kcode1.SelectedItem.ToString, kcode2.SelectedItem.ToString)
等と、SQLを一気に書いてあとで置換するなどすると間違えにくいと思います。

ちなみに私が指摘したところはまだ間違っています…


VBSS  2003-12-18 20:53:59  No: 110729

とろさん、特攻隊長まるるうさん、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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加