2011年9月7日水曜日

Access2007 SQLServerを使ってのやり取りでのケアミス

いろんな言語を使っているのとご老体で頭の中が整理できず、ついついやってしまうミスがますます増えてきた。

特にAccessを使っていると、前の投稿のように日付型を変数に放り込むとき、#でくくるという決まりがある。つまり、
ymd = #2011/5/1#
のようにすると、ymdという変数には日付のデータが代入される。

ここまではいいのだが、問題はこれから。
日付型を使ったSQL分をリテラルで作成しようとした時、ついつい先程の癖が出てしまう。
Access純正のDAOでAccessのMDBファイルとやり取りをするときはこれでいい。

例えば、フォームにフィルターを掛けるとき
strSQL = "ymd > #2010/1/1#"
me.form.Filter = strSQL
で無事OKだと思うのだが、SQLサーバにアクセスしようとした時は、日付は シングルクオーテーションでくくるという決まりがある。今回は、しばらくプログラムの修正をサボっていたので、このことをすっかり忘れてしまい、はまってしまった。つまり、上述の例を置き換えると
strSQL = "ymd > '2010/1/1'"
me.form.Filter = strSQL
となるのである。

たったこれだけのことだけど、忘れた馬鹿のはかなさ。肝に銘じてすぐ思い出すようにしよう。

0 件のコメント: