Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1051 / 2272 ツリー ←次へ | 前へ→

【8983】コンボボックスを使った検索で、シングルコーテーションエラー bigote 07/1/13(土) 15:11 質問[未読]
【8984】Re:コンボボックスを使った検索で、シングル... YU-TANG 07/1/15(月) 2:02 回答[未読]
【8992】Re:コンボボックスを使った検索で、シングル... bigote 07/1/15(月) 13:24 お礼[未読]
【8997】Re:コンボボックスを使った検索で、シングル... まさ7251 07/1/15(月) 15:50 発言[未読]
【9007】Re:コンボボックスを使った検索で、シングル... bigote 07/1/16(火) 20:04 お礼[未読]

【8983】コンボボックスを使った検索で、シングル...
質問  bigote  - 07/1/13(土) 15:11 -

引用なし
パスワード
   CD検索のデータベースを作っています。
メインフォームにコンボボックスを配置して、別のフォーム(表形式のF_MUSIC)を表示させたところエラーになりました。

Private Sub コンボ7_BeforeUpdate(Cancel As Integer)
DoCmd.OpenForm "F_MUSIC", , , "MUSIC_TITLE like'*" & Me!コンボ7 & "*'"
End Sub

エラーになったのは、
I'm Old Fasioned
What's New?
などなどの、シングルコーテーションを含む曲名でした。
Me!コンボ7の文字列にシングルコーテーションを含む場合の回避方法をご存知の方、よろしくご教示ください。m(__)m

【8984】Re:コンボボックスを使った検索で、シング...
回答  YU-TANG  - 07/1/15(月) 2:02 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> Me!コンボ7

Replace(Me!コンボ7,"'","''",1,-1,vbBinaryCompare)

…とか。

【8992】Re:コンボボックスを使った検索で、シング...
お礼  bigote  - 07/1/15(月) 13:24 -

引用なし
パスワード
   ▼YU-TANG さん:

ありがとうございました。
ご指示のとおり、
Replace(Me!コンボ7,"'","''",1,-1,vbBinaryCompare)
と、修正したところうまく動きました。

難問解決でホッとしているのですが、いまひとつ理屈がわかりませんので、もう少しおつきあい願えますか。
まず、Replace関数については、概ね理解しているつもりです。

以下の例では、Where句の部分を単純化するため、Likeをイコールに、ワイルドカード(*)省略としています。

a.
Me!コンボ7の中身が「What is this?」だとすれば、
MUSIC_TITLE="What is this?"
式全体を文字列として扱うので、内側のダブル…をシングル…にして、
"MUSIC_TITLE='What is this?'"
この場合、なんら問題なし。

b.
Me!コンボ7の中身が「What's this?」と「'」を含む場合、
MUSIC_TITLE="What's this?"
"MUSIC_TITLE='What's this?'"
となり、エラーが生じる。
回避策として、
Replace(Me!コンボ7,"'","''",1,-1,vbBinaryCompare)
置換すると以下のようになりますよね。
"MUSIC_TITLE='What''s this?'"
シングルコーテーションの数は対になり、エラーは生じませんが、これで[MUSIC_TITLE]に格納されている「What's this?」が検索できるのが理解できません。
「What」+「s this?」で検索していると考えればよいのでしょうか?
それとも、根本的に考え方が間違っている?

【8997】Re:コンボボックスを使った検索で、シング...
発言  まさ7251  - 07/1/15(月) 15:50 -

引用なし
パスワード
   検索エンジン(Google等)で、
Access シングルコーテーション
辺りで検索すると色々と出てきます。

例えば。
http://support.microsoft.com/kb/286242/ja

※httpは半角に打ち変えてください。

【9007】Re:コンボボックスを使った検索で、シング...
お礼  bigote  - 07/1/16(火) 20:04 -

引用なし
パスワード
   ▼まさ7251 さん:

ご指摘のように、いろいろググッてみました。

結論としては、文字列にシングルコーテーションが含まれると、そこで文字列終了とみなされ、式全体としてエラーになる。
シングルコーテーションを2回繰り返すことで、文字としてのシングルコーテーションと認識させることができる。よって、Replace関数が有効なんですね。

【8992】後半の私の疑問は、なんら意味がなさそうです。
みなさん、いろいろお世話になりました。m(__)m

1051 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free