こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access クエリのデータ型について

AccessでPablic変数を日付範囲指定、クエリの抽出条件に指定したのですが、「抽出条件でデータ型が一致しません。」とのエラーメッセージで抽出出来ません。

【処理フロー】
1.フォームで、開始日と終了日をPublic変数へ格納
2.データ抽出クエリの日付条件に"GetData()"Public Functin VBAで変数を格納した値をクエリの抽出条件に返す。

《変数》
'開始日の宣言
Public sDate As Date
'終了日の宣言
Public eDate As Date

《GetData()》
Public Function GetDate()
MsgBox "開始日は、" & sDate & vbCrLf & "終了日は、" & eDate
GetDate = ">=#" & sDate & "# And <=#" & eDate & "#"
MsgBox ("Where文は、" & GetDate)
End Function

デバッグの為、"GetDate()"の戻り値を、メッセージボックスで表示してますが、戻り値は正常とおもわれますが、「抽出条件でデータ型が一致しません。」でクエリが実行できません。

ここを参考に、上記仕様にしました。
http://www.tsware.jp/tips/tips_369.htm

どうすれば、日付範囲をPablic変数から指定出来るか、お教え頂けましたら幸いです。
ちなみに、Pablic変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。
もし、ほかに良い処理方法が有れば、ご教授ください。

投稿日時 - 2014-01-03 10:21:37

QNo.8411429

すぐに回答ほしいです

質問者が選んだベストアンサー

GetDate = ">=#" & sDate & "# And <=#" & eDate & "#"

と文字列を & で結合してますので、GetDate の返り値は文字列になります。

おそらく日付型のフィールドの抽出条件にこの関数を設定していると思われますので、当然「抽出条件でデータ型が一致しません。」とのエラーになります。


>=#2013/1/1# And <=#2014/1/1#

というような式を返したいと期待しているのだと思いますが、
そもそも関数は値しか返すことはできません。

Public変数を使いたいのなら、

Public sDate As Date
Public eDate As Date

Public Function GetSDate() As Date
GetSDate = sDate
End Function

Public Function GetEDate() As Date
GetEDate = eDate
End Function

として、クエリの日付型フィールドの抽出条件の式を下記のようにします。


>= GetSDate And <= GetEDate

投稿日時 - 2014-01-03 11:59:01

お礼

意味もちゃんと理解しないで、"&"で安易に結合していたのが原因でした。

お教え頂いた内容で、完璧に実現できました。
ありがとうございます。

投稿日時 - 2014-01-03 15:40:32

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

投稿時にMsgBoxのWhere文を書いて欲しいですね。

Date型なんだからFormat文で整形でしょうね。
Where条件に#で囲んだ日付を書く時、元が英語圏のソフトだけに
mm/dd/yyyy が良いらしい。

投稿日時 - 2014-01-03 12:53:14

お礼

そうなんです、Format文も考えたんですが、参考に出来るサイトが見つからず、安易に"&"で結合して返そうしました。

ご意見ありがとうございました。

投稿日時 - 2014-01-03 15:42:48

あなたにオススメの質問