MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[808]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(808番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
RE:  日付の取得

Date: Tue, 9 Sep 2003 10:57:58 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、おはようございます

-----Original Message-----
From: m.taniguchi [mailto:who@example.co.jp] 
Sent: Friday, September 05, 2003 1:19 PM
To: MSDE FunClub
Subject: [ml-msde-beg:00800] 日付の取得


> strSQL="Select * FROM TEST" & _
>       " Where (日付=#" & Cdate(Format([Forms]![フォーム1]![T日
>付],"yyyy/mm/dd")) & "#);"

上記のTESTテーブルが、SQLServer上に存在し、「日付」列がDATETIME型
だとします。

 SQL文が、パススルークエリではなく、通常のAccessのSQL文として投入
されるのであれば、AccessのSQL文の表現に従う必要があります。

 Accessでは、日付け時刻表現は、文字列ではなく、前後に#記号で囲みます。
                "2003/09/08"  ではなく、 #2003/09/08#  です。
年月日の設定によっては、 #9/8/2003#形式もあります。

 但しコントロールに連結したクエリであれば、#は不要で
                   WHERE  日付=[Forms]![fm]![dt]
で動いてくれます(Access2002で確認)。


ただAccess2002のリンクテーブルを使った場合のSQL文では、テーブル名
の前に、オーナー名_ が付加されています。

                   WHERE  dbo_テーブル名.日付=[Forms]![fm]![dt]

となります。

このdbo_の付加文字列は、SQLServerに渡る時は、dbo.に変換されています。
また逆に、AccessのクエリのSQLビューでこのdbo_の付加文字列を削除すると、
クエリが動かなくなります。

 VBプログラムの中で、リンクテーブルに関するSQL文を記述するときは
そのテーブルの所有者名を、owner. ではなく、 owner_ を付けて下さい。
所有者名は省略できません。通常は、dbo_ です。

 dbo_の付加文字列が必要かどうかは、AccessのバージョンやODBCの
バージョン等に関連があるでしょう。

  SELECT  TEST.日付 FROM TEST WHERE (((TEST.日付)=Forms!fm!dt))
は、Access2002では許されず、
         SELECT  dbo_TEST.日付 FROM dbo_TEST 
                             WHERE (((dbo_TEST.日付)=Forms!fm!dt))
にします。





また、「日付」列がDATETIME型の場合、SQLServerでよく犯す誤りがあります。

 DATETIME型は、日付け情報だけではなく、時刻情報も一緒に覚えます。

                           WHERE  日付 = '2003/09/08'

という検索条件は(この表現は、Transact-SQL上)、2003年9月8日午前0時
を表現します(書籍上巻第1章79ページ参照のこと)。

  トリガなどで現在の日付をセットしているような場合は、実際は時刻もその
トリガが動作したときの時刻になっていることがあります。

 ですから、WHERE 日付 = '2003/09/08' という検索条件では、午前0時
きっかりのレコードしか取得できません。
                     WHERE  日付 = '2003/09/08 00:00:00' 
の検索条件になります。

 時刻を無視して9月8日だけのレコードを取得するときは
      WHERE  日付  BETWEEN  '2003/9/8 00:00:00' AND '2003/9/8 23:59:59'
のような範囲指定が必要です。

書籍上巻100ページ参照
http://www.horikawa.ne.jp/msde/gihyo/sql02/ex-1/ex-06.html

あるいは、SQLServer側で、時刻を落としてしまう方法もあります。

------------------------------------
(株)日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    09月09日(火曜日) 10時55分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/




[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。