- PR -

NULL検索

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-09-06 23:29
あ、、そうですよね、、。

ところで再度聞きますがDBはAccessですか?私の環境では
OleDbDataAdapterでパラメータ名に@makerとか使えましたよ。
データベースエクスプローラ上では無理でしたけど。

1回ずつしか使えないとなると、

WHERE ( IIF(IsNull(商品名) , '' ,商品名 ) LIKE '%' + ? + '%')
AND ( IIF(IsNull(メーカー), '' ,メーカー) LIKE '%' + ? + '%')

こんなかんじでしょうか。やってることはろでおぼーいさんのと同じですが。
ただ、パラメータを両方空にした場合は全て出力されてしまいます。
あと、パラメータがnullの場合には対応できていません。
([空文字]じゃなくてnullのケースがあるんですか?)
HM
会議室デビュー日: 2008/08/31
投稿数: 12
投稿日時: 2008-09-07 06:37
そうです。
ACCESSです。

引用:

WHERE ( IIF(IsNull(商品名) , '' ,商品名 ) LIKE '%' + ? + '%')
AND ( IIF(IsNull(メーカー), '' ,メーカー) LIKE '%' + ? + '%')



で、うまく行きました!!
ありごとうございます。

NULLというか空文字ですね。
ただ、is Nullが「真」になるんでNULLなのかなぁと思っていたんですが・・・。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-09-07 12:31
'' IS NULL は真にはならないと思います。

ただ、AccessDataSource(またはその他のデータソース)を使用しているなら
CancelSelectOnNullParameterプロパティ(デフォルトがtrue)や、各パラメータの
ConvertEmptyStringToNullプロパティ(デフォルトがtrue)があるので注意が必要です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-09 21:42
> 「?」って、1回しか使えないですよねぇ。

なんで?Parameters に、「商品名」を2回追加すればいい。
'?' を使う場合は、Parameters に挿入した順に置き換えられるので、'?' が出てくる順番に、そこに置き換えたいオブジェクトを挿入してやれば、何度でも使えます。
「挿入した順」なので、順番を間違えるととんでもないことになります。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-09-09 22:31
引用:
フォームの内容がNULLかどうかのチェックをかけてIF文で分岐させるのでしょうか?


という選択肢もわかりやすくて良いと思うのですが。

コード:
Dim where As New StringBuilder()

With where
If フォームの商品名が入力あり Then
.Append(" [商品名] LIKE '%' + ? + '%'")
パラメータに商品名をAdd
End If

If 0 < .Length Then .Append(" AND")

If フォームのメーカーが入力あり Then
.Append(" [メーカー] LIKE '%' + ? + '%'")
パラメータにメーカーをAdd
End If
End With

Dim sql As New StringBuilder()
With sql
.Append("SELECT * FROM [table1]")
If 0 < where.Length Then
.Append(" WHERE")
.Append(where.ToString())
End If
End With



-----
HM さんが
> ちなみにASPで書いたときは
と言われている事とほとんど同じでしたね。
すみません。

-----
編集したらコードの中が改行×2になりました!
そういうもんですか?

[ メッセージ編集済み 編集者: King 編集日時 2008-09-10 09:12 ]

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