アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL Serverのテーブル
列名:時刻
データ型:datetime型
にて作成しています。
Accessにてテーブルをリンクさせ、SQL文にてアクセスするようにしているのですが、時刻が画面にて入力された開始時刻と終了時刻との範囲内のでーたを取得したいのです。
画面の開始時刻と終了時刻は書式を時刻(L)にて指定しています。
0:00:00 ~ 23:59:59
と画面にて指定した場合に
strWhere = "時刻 >= " & Me![開始]
strWhere = strWhere & " AND 時刻 <= " & Me![終了]
strWhere = strWhere & " ORDER BY 日付,時刻 ASC"
上記SQLでは、
行1:00の近くに無効な構文があります。
とメッセージが表示されエラーになります。

strWhere = "時刻 >= '" & Me![開始]
strWhere = strWhere & "' AND 時刻 <= '" & Me![終了]
strWhere = strWhere & "' ORDER BY 日付,時刻 ASC"
上記のように文字として扱うと対象のデータが抽出されません。

Dim StDate As Date ' 開始
Dim EdDate As Date ' 終了
StDate = Format(Me![開始], "hh:mm:ss")
EdDate = Format(Me![終了], "hh:mm:ss")
にてMe![開始]をStDate、Me![終了]をEdDateに変更してみましたが同じでした。

なにか、よい方法はないでしょうか?

A 回答 (5件)

sqlサーバーには時刻だけの型はありません。


accessの書式でそう見えているだけで実際は日付と時刻を持っています。
ですから抽出時には下記のように変換しないといけません。

"convert(char(8),時刻,108) >= '" & Me![開始] & "'"
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事データを抽出することができました。
Enterprise ManagerにてSQL Serverのテーブルの開くで全行を返すにて表示したときに、表示されなかったのでわかりませんでした。
本当にありがとうございました。

お礼日時:2005/02/01 17:13

SQL Serverに接続して試験できる環境にありません(^^;



で、取り敢えず ADO で MDB に接続して試験しました

WHERE (((DownLoadLog.DownLoadDateTime)>#1/23/2005 8:0:0# And (DownLoadLog.DownLoadDateTime)<#1/23/2005 9:0:0#));

のような書き方はエラーになります。これを

WHERE (((DownLoadLog.DownLoadDateTime)>38375.33333333333333333333333333333333 And (DownLoadLog.DownLoadDateTime)<38375.375));

と数値で範囲指定したところ
1月23日8時~9時のデータが抽出できました。
要するに整数部が「年月日」小数部が「時分秒」です。

あくまでもSQL Serverではないので参考程度ですが
    • good
    • 0

#2です


「時刻」フィールドには時刻だけが入っているのか、日付+時刻が入っているのか?
#2では時刻だけが入っているとしたものです。だから 1889 の部分ができる。
日付+時刻であれば、考え方を変えなければなりません

この回答への補足

ありがとうございます。

テーブルには、日付、時刻、日付+時刻をもっております。

日付には、2004/12/01
時刻には、1:07:30
日付+時刻には、2004/12/01 1:07:30

と入っています。

時刻のみのときも、日付+時刻のときも、SQL ServerのテーブルをSQL文を使ってAccessからOPENしようとしたときにエラーになります。

範囲内のデータを取得したいので、日付+時刻にて読み込みたいと思っています。

よろしくお願いします。

補足日時:2005/01/31 09:54
    • good
    • 0

Acsess2000 が作るSQL文を参照してみました。



クエリーに条件を

>#0:00:00# And <#23:59:59#

と入れると

SELECT DownLoadLog.xTime, DownLoadLog.LogID
FROM DownLoadLog
WHERE (((DownLoadLog.xTime)>#12/30/1899# And (DownLoadLog.xTime)<#12/30/1899 23:59:59#));

ちょっと余計なものがあるのはご勘弁下さい(^^;
ともかく

<#12/30/1899 23:59:59#

この辺りが参考にならないでしょうか?

この回答への補足

ありがとうございます。

#12/01/2004 0:00:00#
で試してみましたができませんでした。
:がダメみたいです。

SQL Serverをオープンするときにエラーになります。

とりあえず、日付までにしてSQL Serverに接続し、
データを読み込んでからIF文で判断するようにしました。

一種の逃げなので、良い方法があればよろしくお願いします。

補足日時:2005/01/29 13:48
    • good
    • 0

AccessではWhere条件で時刻・日付のデータを使用する場合は値の前後に#が必要だと思います。



ですから
strWhere = "時刻 >= " & Me![開始]
strWhere = strWhere & " AND 時刻 <= " & Me![終了]
strWhere = strWhere & " ORDER BY 日付,時刻 ASC"


strWhere = "時刻 >= #" & Me![開始] & "# "
strWhere = strWhere & " AND 時刻 <= #" & Me![終了] & "# "
strWhere = strWhere & " ORDER BY 日付,時刻 ASC"
とすれば良いのではないでしょうか?
実際に作成したわけでは無いので、何かありましたら補足をお願いします。<(_ _)>
参考までに、下記のURLで時刻の扱いについて記述してあります。

参考URL:http://www.accessclub.jp/bbs3/0067/superbeg25196 …

この回答への補足

ありがとうございます。

早速行ってみましたが、やっぱりエラーになります。
行1:'#0:'の近くに無効な構文があります。
とメッセージが表示されました。
ウォッチ式にてstrWhereの中を見ると
時刻 >= #0:00:00#
となっています。
参考URLを見ましたがわかりません。
Nullの場合は、SQL文から外しているので、Nullの場合にはうまく動きます。
よろしくおねがいします。

補足日時:2005/01/28 09:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!