ここから本文です

アクセス VBA内でのSQLの記述について教えてください。

syn********さん

2012/5/415:19:57

アクセス VBA内でのSQLの記述について教えてください。

クエリを作成してSQLビューをコピーしVBAに張り付けて、

Dim SQL As String
SQL = "SQL文;"
Docmd.RunSQL SQL

という感じで使用したいのですが、この場合だと、
"SQL文;"の文中で使用しているダブルクォーテーションは
シングルクォーテーションに置き換える必要があります。

そこで質問なんですが、例えばSQL文の中に

Dcount("名前","名簿テーブル","日付=#" & Forms!入力フォーム!日付 & "# And 性別='男'")

という部分があるとします。そして、
この中のダブルクォーテーションをそのままシングルクォーテーションに置き換えるとすると、

Dcount('名前','名簿テーブル','日付=#' & Forms!入力フォーム!日付 & '# And 性別='男'')
となりますが、このまま実行すれば、文末の '# And 性別='男'' の部分でエラーになります。

※男は文字列で性別フィールドの入力値は男か女しかありません。

この場合はどのように記述すればよいのでしょうか?
いろいろ探してみたのですが、これと同じ例を見つけることができませんでした。

閲覧数:
10,472
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

lll********さん

編集あり2012/5/418:42:28

DCount(""名前"",""名簿テーブル"",""日付=#"" & [Forms]![入力フォーム]![日付] & ""# And 性別='男'"")

と書いてみてください。


【解説】
DCount(”○”,”○”,”○=’○’”)
を入れたいわけです。
3つ目の引数でシングルクォーテーションを使用しているので、ダブルクォーテーションをシングルクォーテーションに置き換えるわけにもいきません。
そこで、特殊な文字であるダブルクォーテーションを文字と認識する「エスケープ文字」を入れてあげるのです。
”” ← このように2回続くと1文字目はエスケープ文字として認識され次のダブルクォーテーションが文字として認識してくれるのです。
わかりやすく言うと、2つダブルクォーテーションが続くと1つのダブルクォーテーションの文字として認識されるということです。
ただし、文字列はダブルクォーテーションで囲まなければならないという決まりがあります。
””←これもダブルクォーテーションで囲まれた中で使用します。

質問文でいうなら、
Dim SQL As String
SQL = "SQL文始まり・・・・・・・・・・ DCount(""名前"",""名簿テーブル"",""日付=#"" & [Forms]![入力フォーム]![日付] & ""# And 性別='男'"") SQL文続き・・・・・・・;"
Docmd.RunSQL SQL
です。

質問した人からのコメント

2012/5/4 22:31:21

成功 lll_red_vanilla_lllさん
なるほど!!エスケープするという仕組みがあったんですね。
とても勉強になり、無事解決できました。どうもありがとうございます。

mahoo_nieeさん
回答ありがとうございました!!
囲むの意味について、もっと勉強したいと思います。

ベストアンサー以外の回答

1〜1件/1件中

mah********さん

2012/5/416:46:51

>この中のダブルクォーテーションをそのままシングルクォーテーションに置き換えるとすると

意味も考えて置き換えをすることです。
単純に「”」を「’」に、でなくて、囲むってことを意識して「”」1つ書いたらペアもある、との意識です。

「性別='男'' 」
の「'」は文字「男」を囲み始めためのもの、囲み終わりの「'」がありません。これではエラーです。
「性別='男'"」
と正しい記載もあるので、これは投稿のときに間違えたものでしょう?。

条件式が
日付=#2012/04/30# And 性別='男'
だとしたら、
前後を「”」で囲む
" 日付=# 2012/04/30 # And 性別=' 男 ' "
この時点でも成立すると思います。
面倒でも丁寧に見れば記載ミスの問題はなくなります。
空白は最後に詰めればよいです。

それと「’」「”」を区別する意味で、
全体の文字列の中の囲みはシングル、とする、
全体の文字列の中の囲み、引数の囲みはダブル、にする、
とする。
漢字の「”」は使わない。
いろいろ工夫してみるとよいです。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる