- ベストアンサー
アクセスVBAの検索で。
アクセスでカレンダーというかスケジュールを管理できるようなものをつくろうとしています。 非連結フォーム1に ・入力年 ・入力月 ・[1]-[45]まで(それぞれ年月が変わると日付がかわる) という感じで入っています。 T_用件というテーブルには ・年(数値型 ・月(数値型 ・日(数値型 ・用件(テキスト型) とあり、これをもとに「F_用件」フォームを作成してあります。 フォーム1のボタンの1つを例にとるとこんな感じです。 If Me![7].Value <> "" Then Year = "(T_用件.年=" & (Me!入力年.Value) & ")" Month = "(T_用件.月=" & (Me!入力月.Value) & ")" Day = "(T_用件.年=" & (Me![7].Value) & ")" WhereCond = WhereCond & " AND (" & Year & " AND " & Month & " AND " & Day & ")" End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_用件", acNormal, , WhereCond こうするとF_用件フォームは開くのですが、きちんと検索されてきません。 どこが悪いのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 すいません、質問の記述ミスかも知れませんが 「Day = "(T_用件.年=" & (Me![7].Value) & ")"」 は 「Day = "(T_用件.日=" & (Me![7].Value) & ")"」 ではないでしょうか? 間違っていたらごめんなさい。 ではでは・・・
その他の回答 (1)
- ARC
- ベストアンサー率46% (643/1383)
それ以前の処理でWhereCondを設定しているのでしょうか? WhereCond = Mid(WhereCond, 6) とあるので、先頭の「WHERE 」を外そうとしているのだとは思うんですが… ありがちなのは、 "AND (T_用件.月=12)" みたいな文字列を生成してしまってる場合ですとか。 Docmd.OpenForm… の行にブレークポイントを仕掛けて、そこで止まったら。イミディエイトウインドウ(Ctrl+G)を出して、 ? WhereCond を実行してみてください。 組み立て後のWhere句が見れるんで、おかしくないかどうかを確認してみてください。 同様のクエリ(但し、WHERE句無し)を作成して、SQLビューにしてから「WHERE 」に続けて組み立て後の文字列を追加してみたら、正しいか否かは容易に判別できますよ。 後は、フォームのFilterプロパティ、FilterOnプロパティを確認してみることかな。 どうしてもダメな場合は、「SELECT」から始まる完全なSQLを生成して、Docmd.OpenFormで開いた後に、フォームのRecordSourceプロパティに設定してしまえば、絶対にうまく動くはずです。(SQLが間違っていない限りは。) ヒントにでもなれば幸です。
お礼
回答ありがとうございます。 wherecondは設定してあります。 直接の原因は#2の方のところに書いたとおりです(汗) でもその他の情報ためになりそうです。 ありがとうございました。
お礼
回答ありがとうございます。 そうなんです、そこが間違ってたんです。 投稿したあと気づいたんですがなんともならなくて…。 ご指摘ありがとうございました。