複数フィールドからの検索 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 vb素人  (社会人) 投稿日時 2016/11/18 09:42:01
shu様、魔界の仮面弁士様

ありがとうございます。
対策を教えていただいただけでなく、丁寧な説明かつエスケープ処理まで…
とても勉強になります。

自分では少しできるようになっていたつもりですが、まだまだ勉強不足と痛感しました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/11/17 20:02:26
> = "キーワード LIKE '" & ToolStripTextBox1.Text & "'"
たとえば、テキストに「O'Reilly」という文字列が
入力された場合、このコードだと正しく処理されないはずです。

ですから、エスケープ処理を施して
 = "キーワード LIKE '" & ToolStripTextBox1.Text.Replace("'", "''") & "'"
などとしておいた方が良いと思います。


今回のケースは、VB2015 であればこう書けます。
'エスケープ処理しておく 
Dim escValue = ToolStripTextBox1.Text.Replace("'""''")

'埋め込み 
Me.UdonTableBindingSource.Filter = $"(キーワード LIKE '{escValue}') OR (アイデア LIKE '{escValue}')"


vb素人さんは VB2012 を利用していたと思うので、shu さんの String.Format 案が良さそうです。
投稿者 shu  (社会人) 投稿日時 2016/11/17 15:40:14
> ("キーワード LIKE '" & ToolStripTextBox1.Text & "'") Or ("アイデア LIKE '" & ToolStripTextBox1.Text & "'")  

"(キーワード LIKE '" & ToolStripTextBox1.Text & "') Or (アイデア LIKE '" & ToolStripTextBox1.Text & "')"

ですね。

このような文字列連結を記述するときは結果の文字列をまず想定して
"(キーワード LIKE 'aaa') Or (アイデア LIKE 'bbb')"
とします。
この文字列の内可変となる部分を順に文字列の外に出すようにしていきます。
まずaaaに対し考えると
"(キーワード LIKE '" & aaa & "') Or (アイデア LIKE 'bbb')"
このようになります。aaaを変数に置き換えます。
"(キーワード LIKE '" & ToolStripTextBox1.Text & "') Or (アイデア LIKE 'bbb')"
同様にbbbについて
"(キーワード LIKE '" & ToolStripTextBox1.Text & "') Or (アイデア LIKE '" & bbb & "')"
となります。bbbを変数に置き換えます。
"(キーワード LIKE '" & ToolStripTextBox1.Text & "') Or (アイデア LIKE '" & ToolStripTextBox1.Text & "')"
となります。


またString.Formatを使った方が見た目がわかりやすくなります。

String.Format("(キーワード LIKE '{0}') Or (アイデア LIKE '{0}')", ToolStripTextBox1.Text)
という表記になり条件部分がわかりやすいかと思います。


投稿者 vb素人  (社会人) 投稿日時 2016/11/17 13:11:18
.NET + Microsoft Accessにおける検索についてお尋ねします。

下記コードで、フィールド「キーワード」からの検索は可能ですが、
フィールド「アイテム」からも検索したい場合、どのように記述すれば良いのでしょうか?



        If e.KeyCode = Keys.Enter Then
            Me.UdonTableBindingSource.Filter =
           "キーワード LIKE '" & ToolStripTextBox1.Text & "'"

単純に次の記述で試してみましたが、エラーとなってしまいました。


        If e.KeyCode = Keys.Enter Then
            Me.UdonTableBindingSource.Filter =
           ("キーワード LIKE '" & ToolStripTextBox1.Text & "'") Or ("アイデア LIKE '" & ToolStripTextBox1.Text & "'")