日付時刻型の比較

このQ&Aのポイント
  • 日付時刻型のフィールドを持つテーブルのデータから、1ヶ月前のデータより新しいものを抜き出したいです。
  • VBScriptでDATEADD関数を使用して1ヶ月前の日付を取得し、それと比較していますが、うまくいきません。
  • 変数の値を型変換する必要があるのか、良い方法があれば教えてください。
回答を見る
  • ベストアンサー

日付時刻型の比較

お世話になります。コンピュータ歴が短いもので質問の意味がよくわからないかもしれませんがよろしくおねがいします。 accessのDB「テーブル1」に日付時刻型のフィールド「フィールド1」があり、 2001/00/00 00:00:00の形式でデータが入っています。 テーブル1のデータで、1ヶ月前のデータより新しいもののみをVBScriptで抜き出したいのですが、下記のようにDATEADD関数で変数1に1ヶ月前の日付を代入し、それと比較しようとしましたが、うまくいきませんでした。 変数1 = DATEADD("m" ,-1 ,NOW) Set rs = Server.CreateObject("ADODB.RecordSet") sql = "SELECT * FROM テーブル1 WHERE フィールド1 >= 変数1" 変数1をResponse.Writeすると見た目は同じ形式で入っていました。 変数1の部分を手書きで#2001/00/00 00:00:00#と書けばうまく動いてくれるの ですが・・・ 変数の値を型変換しなければいけないのでしょうか? 良い方法がありましたら教えてください。

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

  • ベストアンサー
  • mann555
  • ベストアンサー率46% (29/62)
回答No.1

変数1をCdate関数で変換してみては? sql = "SELECT * FROM テーブル1 WHERE フィールド1 >= " & Cdate(変数1) もしくは sql = "SELECT * FROM テーブル1 WHERE フィールド1 >= #" & 変数1 & "#" とか

iwabuu
質問者

お礼

とても早く解答いただきありがとうございます。 2番目の#"&で囲むやりかたであっさり動きました。 変数1を#ではさむのはすでに試していたのですが、 &演算子がぬけていたことに気づきました・・ 基本的なことがわかってなくてすみませんでした。

関連するQ&A

  • 「2月」でフィルタをかけたい。

    オフィス2003です。 テーブル1の 日付フィールドには「yyyy/mm/dd hh:nn」形式でいくつかの日付の入力されたレコードがあります。 エクセルのADOを使って テーブル1から「2月」のレコードをフィルタをかけて抽出したいのですがうまく行きません。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\db1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("日付 = " & "'" & Month(Date) & "'") rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub を実行すると「種類が一致しません」というエラーになります。 どうすれば2月のデータを取得できるのでしょうか? ご教授よろしくお願いします。

  • 2次元のdictionary

    こんにちは。 recordsetの結果をDictionaryにいれたいと思っています。 環境はWindows Vista、vbScriptで書いています。 set dc = createobject("scripting.dictionary") Set rs = Server.CreateObject("ADODB.Recordset") rs.open (sql文), con  for i = 0 to rs.recordcount -1 for j = 0 to rs.fields.count - 1 dc.add rs.fields(j).name, rs.fields(j).value next next ちょっとイメージっぽく書きましたが(このままではエラーでます)、要は複数のフィールドを持つ複数のレコードを入れられないかということです。 色々調べたりしてみたのですがわかりません。 できないのかな?と思いました。 もしできるなら書き方をご教授頂けたらと思います。 よろしくお願いします。

  • 日付/時刻型フィールドで時刻データのみを扱うには?

    アクセスのテーブル管理について質問させてください。 現在アクセス上で処理しているテーブルの一つ、日付/時刻型フィールドには時刻データが入っています。 形式:定型入力 時刻(L) 13:12:00 このテーブルをCSVデータとしてエクスポートしたところ、1899/12/30という日付データが時刻データの前に追加されてしまいました。 定型入力をしていたので日付データは扱われないものだと思っていたのですが、見えない部分で日付データも扱われていたということですね。 これを日付/時刻型フィールドのまま時刻データのみを扱う様にするにはどのようにしたらよいのでしょうか? 具体的には、アクセス上で作成した時刻データを含む計測値を日付毎のCSVファイルとしてエクスポートし、後に必要になった場合指定された日付のファイルをインポートします。 よって日付データは必要ないので時刻データのみで管理をしたい、ということです。 レコード数が多いため、ファイル容量を減らすためデータはなるべく少なくしたいのが実情です。 それでも必要ない日付データを加えておいた方がよいのでしょうか? よろしくお願いいたします。

  • wshでcsvファイルのソートを行いたい

    wshのプログラムで困っているため教えてください。 wshでcsv(カンマ区切り)のファイルのソートを行い、Escel形式で保存するプログラムを書いています。 調べてみたところ、wshではソート関数がないようで、 adodbのsort関数を使用して対処しようとしていますが、どうもうまくいきません。 (※adodbの必要はないのですが、ExcelVBAのsortのコードを書こうとするとエラーになってしまったので、adodbにしています。) <仕様> csvファイルのソートのキーになるのは、「判定区分」の値で昇順に行いたいです。 csvファイルの一行目は、カラム名としてソート対象にはなりません。 読み込んだcsvファイルをexcel形式に保存したいです。 ■csvファイルの形式は、以下のような形です。 性別,年代,判定区分,生年月日,日付 女性,10,0,2010/01/10,2013/7/7 23:57 男性,50,2,2000/03/30,2013/7/7 13:7 女性,10,0,1990/01/20,2013/7/7 15:22 女性,20,1,2001/12/10,2013/7/7 8:10 *----------------------------------- <ソース> Set con = CreateObject("ADODB.Connection") With con .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";" _ & "Extended Properties='text;HDR=Yes;FMT=Delimited'" .Open End With Set rec = CreateObject("ADODB.Recordset") rec.Open "select * from " & csvfile & " order by 判定区分", con *----------------------------------- うまくいかないため ↓でも書いています。 *----------------------------------- Const adDate = 7 Const adVarChar = 200 Dim ans Set objADO = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set re = CreateObject("VBScript.RegExp") rs.Fields.Append "性別", adVarChar, 255 rs.Fields.Append "年代", adVarChar, 255 rs.Fields.Append "判定区分", adVarChar, 255 rs.Fields.Append "生年月日", adDate rs.Fields.Append "日付", adDate rs.Open ans = "" rs.Sort ="判定区分 ASC" rs.MoveFirst Do While Not rs.EOF ans = ans & rs.Fields(0).Value & vbCrLf rs.MoveNext Loop MsgBox ans エラーになってしまいます。 ソート処理だけですでににっちもさっちもいかないため、教えていただきたいです。 どうぞ宜しくお願いいたします。

  • ADOでアクセスのレコードに複数のフィルタをかけるには?

    Sub ADO() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("フィールド1 = " & "'" & 変数1 & "'") rs.Filter = ("フィールド2 = " & "'" & 変数2 & "'") Debug.Print rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub だと最終的にはフィールド2のフィルタ後の個数しか取得できません。 rs.Filter = ("案件CD = " & "'" & 案件CD & "'" And "プロセス = " & "'" & プロセス & "'") だと「型が一致しません」になります。 どうすれば変数1と変数2のフィルタ後のレコードの個数を取得できるのでしょうか? ご教授よろしくお願い致します。

  • WSHでVBScript使いDBのデータを削除、新規登録する。

    申し訳ありませんが、素人の質問です。 WSHをVBSCriptでDBのレコードを削除、 テキストファイルを呼びだし、 呼び出したデータを変数に格納し、DBにインサートしたいのですが、 DBへの接続の仕方がわかりません。 ASPで作成したものは正常に動作するのですが、 WSHで作成したものは、接続するさいにエラーしてしまいます。 エラー箇所は下記の部分です。 すみませんが、回答お願いします。 テキスト呼び出し箇所 Set fso = Server.CreateObject("Scripting.FileSystemObject") Set fts = fso.OpenTextFile("D:\**\*\*\*\A.dat", 1, False, 0) 接続箇所 Con_s.BeginTrans DELETE箇所 Set Rs = Server.CreateObject("ADODB.Recordset") Cmd_s.CommandText = delSq Rs.Open Cmd_s, , adOpenForwardOnly インサート箇所 Set Rs = Server.CreateObject("ADODB.Recordset") Cmd_s.CommandText = strSql Rs.Open Cmd_s, , adOpenForwardOnly 切断箇所 Con_s.CommitTrans

  • 「引数が間違った型、許容範囲外、または競合しています。」で考えられる原因は?

    アクセス2003です。 ADOを使用してテーブルにフィルタをかけたいのですが 「引数が間違った型、許容範囲外、または競合しています。」となってしまいます。 コードはこれです↓ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○\Desktop\○○.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "進捗=" & "未" rs.MoveFirst MsgBox rs("進捗") rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ・「rs.Filter = "進捗=" & "未" 」の部分でなぜか上記のエラーになります。 ・違うフィールドなら問題なくできます。 ・存在しないフィールド名なら 「実行時エラー 3265 要求された名前、または序数に対する項目がコレクションで見つかりません。」 となります。 ・テーブル1に「進捗」というフィールドは存在し、データ型はテキスト型です。 何かわかる方ご回答いただければ幸いです。

  • 実行時エラー'9':インデックスが有効範囲にありま

    WindowsXPで、Access2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割して、フィールド2とフィールド3へ格納するVBAを作成しようとしていますが、あと少しのところでエラーになってしまって解決策が見当たりません。 エラー内容は、「実行時エラー'9':インデックスが有効範囲にありません。」で、下記VBAの rs.Update "フィールド3", ksplit(1) の部分のksplit(1)の格納場所が無かった為に発生していると思います。 実際、その部分を無効にすると、エラーは無くなりますが、フィールド3のデータも必要です。 このようになって欲しいです。 例) テーブル1 フィールド1 フィールド2 フィールド3 1000-100       1000       100 50-301         50       301 Private Sub コマンド0_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Do Until rs.EOF Dim ksplit As Variant ksplit = Split(rs!フィールド1, "-") rs.Update "フィールド2", ksplit(0) rs.Update "フィールド3", ksplit(1) Debug.Print rs!フィールド2,rs!フィールド3 rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上、初心者で、行き詰っておりますので、よろしくお願いします。

  • バックアップをするたびに当日の日付を付加したファイル名で

     下に作成中のコードを載せておきました。この形式でバックアップをとろうと思っているのですが、バックアップを取るとバックアップを取った日付がファイル名に付加されるようにしたいのです。例えば今日バックアップを取れば「20060531backup.mdb」という感じでバックアップがとられ、同じ日にバックアップを取ればそこに上書きされ、6/1にバックアップを取れば新たに「20060601.mdb」というファイルができるようにしたいのです。元になるテーブルは「T許可書」です。入力文字数の関係で一部おかしくなっていますが、わかる方ならわかると思います。よろしくお願い致します。 Private Sub データバックアップ_Click() Dim curPath As String   Dim rtn As String    Dim cn_o As ADODB.Connection Dim cn_b As ADODB.Connection Dim rs_o As ADODB.Recordset Dim rs_b As ADODB.Recordset Set cn_o = CurrentProject.Connection Set cn_b = New ADODB.Connection curPath = CurrentProject.Path & "\" cn_b.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" "Data Source=" & curPath & "backup.mdb" cn_b.Open Set rs_o = New ADODB.Recordset Set rs_b = New ADODB.Recordset rs_o.Open "T許可書", cn_o, adOpenDynamic, adLockOptimistic rs_b.Open "T許可書", cn_b, adOpenDynamic, adLockOptimistic Do Until rs_b.EOF rs_b.Delete rs_b.MoveNext Loop Do Until rs_o.EOF rs_b.AddNew rs_b!申請日 = rs_o!申請日 rs_b!申請者 = rs_o!申請者 rs_o.MoveNext rs_b.Update Loop End Sub

  • Accessの日付・時刻って。

    Access初心者です。 WindowsMe上にて、Access2000を使用しています。 1月~12月までの、フィールドのあるテーブルと、 1日~31日までの、フィールドのあるテーブルを作って、 リレーションシップで、該当する日付をとりだそうと、発想したのですが、 一番最初の、1月~12月までのフィールドのある、 テーブルを作成する時点でつまづいています。 データ型の、日付・時刻には、「月」だけ、「日」だけを、抽出するリストがないですよね? どのように設定したらいいのか、教えてください。 仕事などで使うのではなく、 ただ単に、Accessの操作理解のために、 作ろうとした、自分の練習用の問題です。 できないとは思えないんですが。 また、Accessの勉強をするのに、おすすめの本や、サイトがあったら、お願いします。