クエリ 日付時刻フィールドの条件について [クエリ]
日付時刻型のフィールドに対して条件を設定する場合の注意事項です。
日付時刻型フィールドは、日付と時刻を一緒に格納できますが、日付のみを格納したり、時刻のみを格納する場合などもあります。
格納されている内容により、条件抽出が思ったようにできない場合がありますので、いろいろな場合の抽出パターンを例に示します。
このデータに対して、条件抽出を行います。
・日付と時刻が格納された項目の抽出
基本的なパターン。日付と時刻が格納されている項目を抽出する場合は、日付と日時の両方を指定します。
SQLのWHEREだと、
WHERE T日時.日付 = #2014/1/12 12:34:56#
となります。
日付時刻型の値を記述するときは、「#」でくくります。
文字列の場合の「"」(ダブルクォーテーション)のようなものです。
結果。
同じ日付時刻のレコードが抽出されました。
VBA クエリを実行する DoCmd.RunSQL [VBA]
VBAからクエリを実行する方法のひとつとして、DoCmd.RunSQLがあります。
他に、クエリを実行する方法として、DoCmd.OpenQueryがありますが、下記のような違いがあります。
・DoCmd.OpenQueryは、あらかじめ作成されたクエリを指定して実行します。
・DoCmd.RunSQLは、あらかじめ作成されたクエリを指定して実行することはできません。
・DoCmd.RunSQLは、パラメタに指定されたSQL文を実行します。
・DoCmd.OpenQueryは、SQL文を直接指定することはできません。実行するSQL文をクエリとして登録しておく必要があります。
・DoCmd.OpenQueryは、選択クエリ(SELECT)、アクションクエリ(UPDATEなど)を実行できます。
・DoCmd.RunSQLは、アクションクエリ(UPDATEなど)のみ実行できます。
・DoCmd.OpenQueryで選択クエリ(SELECT)を指定した場合、結果がデータシートで表示されます。
・DoCmd.RunSQLは、選択クエリ(SELECT)を実行できません。
上記のことから、DoCmd.RunSQLの使いどころは、VBAでアクションクエリのSQLを作成し、それを実行する場合になるかと思います。
・構文
DoCmd.RunSQL SQLStatement , UseTransaction
・引数
SQLStatement ・ SQL文を文字列で指定します。
実行可能なSQLは、INSERT INTO、DELETE、SELECT...INTO、UPDATE、CREATE TABLE、ALTER TABLE、DROP
TABLE、CREATE INDEX、DROP INDEXです。
UseTransaction ・ トランザクションに含める場合、Trueを指定します。デフォルトFalse
リファレンスにこう書いてあるので、トランザクション処理ができそうな感じがするのですが、DoCmdでトランザクション処理を行う方法はわかりません…。(できないっぽい)
VBA クエリを実行する DoCmd.OpenQuery [VBA]
VBAからクエリを実行する方法は、いくつかありますが、ここではDoCmd.OpenQueryを説明します。
ナビゲーションウィンドウ(2003以前はデータベースウィンドウ)から、クエリをダブルクリックしたときと同じ動作をさせる場合は、DoCmd.OpenQueryを使用します。
・構文
DoCmd.OpenQuery QueryName , View , DataMode
・引数
QueryName ・ 開く(実行する)クエリの名前を文字列で指定します。必須。
View ・ クエリをどのビューで開くか、下記のAcViewクラス定数で指定します。省略可。
名前 | 値 | 説明 |
---|---|---|
acViewDesign | 1 | デザイン ビュー |
acViewLayout | 6 | レイアウト ビュー |
acViewNormal | 0 | (既定値) 標準表示 |
acViewPivotChart | 4 | ピボットグラフ ビュー |
acViewPivotTable | 3 | ピボットテーブル ビュー |
acViewPreview | 2 | 印刷プレビュー |
acViewReport | 5 | レポート ビュー |
普通にクエリを開く場合は、acViewNormalです。
DataMode ・ クエリを開いて表示されたデータシートに対する入力モードを、下記のAcOpenDataModeクラス定数で指定します。省略可。
名前 | 値 | 説明 |
acAdd | 0 | 新規レコードの追加のみ。 データシートにクエリの結果が表示されず、新規追加の行のみ表示されます。 クエリの結果を参照したり、編集したりはできません。 |
acEdit | 1 | クエリの結果の参照、および編集(追加)ができます。(既定値) 普通にクエリを開いたときの状態です。 |
acReadOnly | 2 | クエリの結果の参照のみ可能です。 編集や追加はできません。 |
VBA ウィンドウを切り替える [VBA]
複数のウィンドウを開いた状態で、目的のウィンドウに切り替える方法です。
切り替えたいウィンドウがフォームの場合は、SetFocusが使えますが、その他のテーブル・クエリなどは、SetFocusメソッドがありませんので、この方法は使えません。
テーブル・クエリなどのウィンドウに切り替えたい場合は、DoCmd.SelectObjectを使用します。
・構文
DoCmd.SelectObject ObjectType , ObjectName , InNavigationPane
・引数
ObjectType … 必須。オブジェクトの種類を、AcObjectTypeクラスの定数で指定します。
名前 | 値 | 説明 |
acDatabaseProperties | 11 | Database プロパティ |
acDefault | -1 | |
acDiagram | 8 | データベースダイアグラム (Access プロジェクト ) |
acForm | 2 | フォーム |
acFunction | 10 | 関数 |
acMacro | 4 | マクロ |
acModule | 5 | モジュール |
acQuery | 1 | クエリ |
acReport | 3 | レポート |
acServerView | 7 | サーバー ビュー |
acStoredProcedure | 9 | ストアドプロシージャ (Access プロジェクト ) |
acTable | 0 | テーブル |
acTableDataMacro | 12 | データ マクロ |
ObjectName … 選択するオブジェクトの名前を文字列で指定します。
InNavigationPane … データベースウィンドウの項目を選択する場合はTrue、開いているウィンドウを選択する場合はFalse(既定値)を指定します。
例えば、テーブル「TMTDFK」を選択する場合は、
DoCmd.SelectObject acTable, "TMTDFK", False
と、します。
現在のウィンドウが最大化されていない状態で、最小化されているウィンドウを選択しても、ウィンドウは最小化されたままになります。
この場合は、選択後DoCmd.Restoreなどを行う必要があります。
VBA ウィンドウの最大化 [VBA]
ACCESSの中に表示されているウィンドウではなく、ACCESS自体のウィンドウを最大化する方法です。
・最大化
DoCmd.RunCommand acCmdAppMaximize
その他、ACCESSウィンドウ操作関連です。
・最小化
DoCmd.RunCommand acCmdAppMinimize
・元のサイズに戻す
DoCmd.RunCommand acCmdAppRestore
他に、ウィンドウサイズの変更、ウィンドウの移動を行う、
DoCmd.RunCommand acCmdAppMove
DoCmd.RunCommand acCmdAppSize
も、あるのですが、パラメタを指定して、目的の状態にするのではなく、その操作を行う状態にするだけで、移動やサイズ変更の操作が必要になります。
実質的に、これは使えないと思います。
あと、DoCmd.RunCommandは、ACCESSのバージョンが古いと、使えないかも。
確認は、2010で行っています。