こんにちは。お世話になります。
【環境】
[1] Windows7 32ビット
・Access2010インストール済
[2] [1]の環境上に立てたVirtualPC(WindowsXP(SP3))
・Microsoft Access 2010 Runtimeインストール済(http://www.microsoft.com/ja-jp/download/details.aspx?id=10910)
・Access 2010 Runtime SP1インストール済(http://support.microsoft.com/kb/2460015/ja)
・レジストリ変更済み(参考URL:http://www.mkkobo.com/runtime/runtime04.htm)
[3] 参照するDB:SQL Server 2008 R2
[4] 使用するPG:[1]で作成したMDEファイル
【やりたいこと】
ランタイム環境下([2]の環境)で[4]の動作確認を行っています。
その中で、以下のSQLを実行したい。
※WHERE条件の[テーブルA.登録日時]はDateTime型である。
Dim DB As ADODB.Connection
Set DB = CurrentProject.Connection
strSQL = "SELECT"
strSQL = strSQL & " テーブルA.*"
strSQL = strSQL & " INTO テーブルB"
strSQL = strSQL & " FROM テーブルA"
strSQL = strSQL & " IN ''[ODBC;driver={SQL Server Native Client 10.0};server=サーバー名;uid=ログインID;pwd=パスワード;database=データベース名]"
strSQL = strSQL & " WHERE Format(テーブルA.登録日時,'yyyy/mm/dd') >= '2012/12/21';" ←★
DB.Execute strSQL
DB.Close: Set DB = Nothing
【現状】
[1]の環境では実行できるが、
[2]の環境では下記のメッセージが表示され、実行できない。
『イベント プロパティに指定した式 クリック時でエラーが発生しました
:OLEオブジェクトのプロパティまたはメソッドにアクセスするときにエラーがはっせいしました。
*マクロ名、ユーザ定義関数名、[イベントプロシージャ]以外の式が指定されています。
*関数、イベント、マクロの評価でエラーが発生しました。
(このエラーは、イベントのロジックの場所を評価できないためにイベントを実行できなかった場合に発生します。
たとえば、フォームの"OnOpen/開く時"プロパティが=[フィールド]に設定されている場合、
イベントが開始されたときに、マクロまたはイベントの名前が実行対象として予期されるため、このエラーが発生します。』
【対策】
★の部分を下記のように書き換えれば、比較対象のデータ型を変換すると[2]の環境でも実行できた。
≪成功≫
strSQL = strSQL & " WHERE テーブルA.登録日時 >= Cdate('2012/12/21 00:00:00');"
strSQL = strSQL & " AND テーブルA.登録日時 <= Cdate('2012/12/22 00:00:00');"
≪失敗≫
・strSQL = strSQL & " WHERE Format(テーブルA.登録日時," & """" & "yyyy/mm/dd" & """" & ") >= '2012/12/21';"
・strSQL = strSQL & " WHERE Format(テーブルA.登録日時," & """" & "yyyy/mm/dd" & """" & ") >= " & """" & "2012/12/21" & """" & ";"
・strSQL = strSQL & " WHERE Format(テーブルA.登録日時,'yyyy/mm/dd') >= '2012/12/21';"
・strSQL = strSQL & " WHERE Format(テーブルA.登録日時,'yyyy/mm/dd') >= Cdate('2012/12/21');"
・strSQL = strSQL & " WHERE DateValue(Format(テーブルA.登録日時,'yyyy/mm/dd')) >= '2012/12/21';"
・strSQL = strSQL & " WHERE DateValue(Format(テーブルA.登録日時,'yyyy/mm/dd')) >= #2012/12/21#;"
・strSQL = strSQL & " WHERE DateValue(Format(テーブルA.登録日時,'yyyy/mm/dd')) >= Cdate('2012/12/21');"
Access 2010 Runtimeの環境でSQLのWHERE句にFormat関数を使用して時間まで比較したい場合には
どのようにしたら良いでしょうか?教えてください。
よろしくお願いします。