• ベストアンサー
  • 暇なときにでも

Access VBA 日付で抽出できない?

次の質問にお答えいただけませんか。 フォームで抽出条件を入力しテーブルから抽出をするとき Dim db As DAO.Database Dim rs As DAO.Recordset Dim mySQL As String Set db = CurrentDb() mySQL = "SELECT * FROM T_明細 " _ & "WHERE 顧客ID = " & CStr(Me!txtKey) & ";" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) 上記のような記述をしました。 テーブル名:T_明細   フィールド:顧客ID  日付 金額  フォームの抽出条件入力テキストボックス:txtKey このとき顧客IDでの抽出は問題なく出来ましたが "WHERE 顧客ID = を "WHERE 日付 = に変更して日付で抽出をしたいのですがうまくいきません。 テーブルの日付フィールドは 書式をgee-mm-dd 定型入力を>L99\-99\-99;0;# で書き込みました。 フォームのtxtKeyテキストボックスのプロパティも書式をgee-mm-dd 定型入力を>L99\-99\-99;0;#に設定してあります。 このようなときは mySQL = "SELECT * FROM T_明細 " _ & "WHERE 日付 = " & CStr(Me!txtKey) & ";" の、記述を何か変更しないといけないような気もしますが 対処の方法を教えていただけませんか。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2155
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.2
  • paz777
  • ベストアンサー率47% (77/163)

こんにちは。 勉強方法ですか? う~ん、私の場合はすべてヘルプで勉強しました。 とも言うのも、Access 2.0の時代から触っていて 当時は何も参考書とかもなくて、他に聞く人もいない 環境だったのでヘルプだけが頼りでした。 で、VBAでSQLを記述するときは、一旦クエリーで正しく 抽出できるように作成して、そのクエリーの実際のSQL を見るとどのように記述すれば良いか分かりますよ。 ではでは・・・

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご丁寧に有難うございます。 ヘルプはどうも見づらくて・・・ >で、VBAでSQLを記述するときは、一旦クエリーで正しく >抽出できるように作成して、そのクエリーの実際のSQL >を見るとどのように記述すれば良いか分かりますよ。 なるほど。こんなことも気づきませんでした。 大助かりです。

関連するQ&A

  • Access 壁にぶつかってます。助けて

    ACCESS VBAの記述でエラーになります。 教えてください。 Private Sub cmd抽出_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim mySQL As Long '抽出条件 Set db = CurrentDb() 'レコードセットを作成 mySQL = "SELECT * FROM T_貸付明細 " _ & "WHERE 顧客ID ='" & Me!txtID & "';" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) 'サブ フォームに表示 Set Me!sub結果.Form.Recordset = rs ' Me!sub結果.Form!日付.ControlSource = "日付" Me!sub結果.Form!貸付.ControlSource = "貸付" Me!sub結果.Form!受領.ControlSource = "受領" Me!sub結果.Form!利息.ControlSource = "利息" Me!sub結果.Form!元金入金.ControlSource = "元金入金" Me!sub結果.Form!貸付残高.ControlSource = "貸付残高" Me!sub結果.Form!次支払日.ControlSource = "次支払日" End Sub 上記の記述で「型が一致しません」とエラーが出ます。 'レコードセットを作成 mySQL = "SELECT * FROM T_貸付明細 " _ & "WHERE 顧客ID ='" & Me!txtID & "';" ここの記述がLongになってない事の間違いだと察するのですが、正しい記述方法を教えていただけませんか。

  • Access 日付での抽出

    初めまして、Access初心者です。 ネットで探しましたが、見つからなかったので、教えて下さい。 Access2010を使用しております。 テーブルの受付日(年月日)の項目で、抽出したいと考えております。 抽出方法は、検索フォームにあるテキストに「年月」を入力して、ボタンを押すと、 帳票フォームで表記されるようにしたいと思っております。 また、IDをクリックすると単票フォームで表記されて編集できるようにしたいと 思っております。 なるべくVBAは使わないで、できればと思っておりますが、 ご教授いただけないでしょうか。 よろしくお願いします。

  • フォーム上のフィルタで抽出されたデータをテーブルに格納したい

    フォーム上のフィルタで抽出されたデータをテーブルに格納したい 度々お世話になります。 フォーム上で3つのキーワードを使って抽出したデータを テーブルに格納したいと思っています。 以下のコードを書いたところ、矢印の部分でエラーが起こります。 お知恵を拝借できませんでしょうか? よろしくお願いいたします。 Private Sub cmd04_Click() Dim db As DAO.Database Set db = CurrentDb() Dim mySQL As String mySQL = "INSERT INTO 04_パソコン機器管理台帳 select * FROM T05_使用者一覧抽出結果 WHERE " & Me.Filter & ";" If MsgBox("該当レコードを追加します。", vbYesNo) = vbYes Then ' SQLを実行します。 db.Execute mySQL   ←エラーが発生します。 MsgBox "該当レコードを追加しました。" End If End Sub

その他の回答 (1)

  • 回答No.1
  • paz777
  • ベストアンサー率47% (77/163)

こんにちは。 このような文で対応できると思います。 mySQL = "SELECT * FROM T_明細 " _ & "WHERE 日付 = #" & _ Format$(Me!txtKey,"yyyy-mm-dd") & "#;" ではでは・・・

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速ご回答くださいまして有難うございます。 私ごとになりますが、趣味も兼ねましてAccessの勉強を始めた50歳半ばの”おじいちゃん”です。 近くで講習とかを受講できるところも無く、解説本を片手の独学です。 わかり辛いところがいっぱいあり、苦労してます。 この「教えて!goo」は非常に役立っています。 お恥ずかしいのですが、ご回答いただいた内容は何を勉強すれば理解が早いでしょう。 今の私は理解と言うよりは、このような時は”このように記述するのだ”と内容も理解せず憶えています。これでは進歩がありません。 「このような本でこのようなことを勉強すればいいですよ」というオススメがあれば教えてくださいませんか。

関連するQ&A

  • Access SQL パラメータクエリ(DAO)

    Access初心者で、独学で頑張っています。 どうしても一人で解決できないので、教えてください。 下記のようなコードを書きましたが、#1で 『PARAMETER句の構文エラーです』 となります。 Dim qd As DAO.QueryDef Dim rs3 As DAO.Recordset Dim mySQL As String Set qd = CurrentDb.CreateQueryDef("") mySQL = "PARAMETERS [ParaヘッダーID] COUNTER;" mySQL = mySQL & "SELECT [テーブルA].[明細ID], [テーブルA].[ヘッダーID] " _ & "FROM テーブルA " _ & "WHERE ((([テーブルA].[ヘッダーID])='ParaヘッダーID'));" With qd .SQL = mySQL   ' #1 ここで『PARAMETER句の構文エラーです』 となる .Parameters("ParaヘッダーID") = [TempVars]![tempヘッダーID] Set rs3 = .OpenRecordset() End With (この後、処理を続ける) やりたいことは、 「テーブルA」から、「ヘッダーID」が一時変数[TempVars]![tempヘッダーID]と一致するデータを抜き出し、後続の処理に使いたいのです。 なお、ヘッダーIDは長整数型で、[TempVars]![tempヘッダーID]をウォッチで確認すると整数が入っていました。 SQLについて、いろいろ調べて試しましたが、なかなか上手く行きません。 どこが違うのかご教授お願いします。

    • ベストアンサー
    • MySQL
  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • 【Access】条件に該当する日付のレコードを抽出する方法について

    下記のテーブルがある場合、2002/03/10と入力すると、 ID=2のレコードを抽出したいのですが、やり方がわかりませんでした。 【テーブル(TABLE)の中身】 ID 開始日付  終了日付 1 2001/01/11 2002/02/12 2 2002/02/11 2002/03/12 3 2003/03/11 2002/04/12 テーブルの日付の列が1つ、入力する日付が2つの場合、 Betweenを使えばよいと思うのですが、 テーブルの日付の列が2つ、入力する日付が1つで、 テーブルの開始日付と終了日付の間に入力日付がある列を抽出する場合、 どうすればよいか分かりませんでした。 その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。 よろしくお願いします。

  • Accessで日付を抽出するパラメータを設定したい

    Accessのクエリで日付に対して与えているパラメータがあります。 パラメータで指定したいデータはフォームのテキストに入力した日の23:59:59 以降の日付を抽出したい。 入力:数値8桁(yyyymmdd)で行う 抽出先テーブルのデータ:yyyy/mm/dd hh:mm:ss 現在以下のパラメータを日付に対して与えると「式が複雑すぎます、、、」と注意されてしまいます。 指定日の23:59:59を抽出範囲として指定するのはどうしたらよいでしょうか? 入力値の変換も含めて、以下のパラメータを入れています。 「+"23:59:59"」をとればエラーは出ません。 <=IIF(Len([Forms]![フォーム名]![日付])=8,CDate(Format([Forms]![フォーム名]![日付],"@@@@/@@/@@")),#9999/1/01#)+"23:59:59" どなたか、お助け下さい。よろしくお願い致します。

  • Accessについて教えて下さい。

    Access初心者です。 フォームのクリック時のイベントで開いた別のフォームを、サブフォームのリンクフィールドように、リレーションの項目を入力しなくてもテーブルに反映させるにはどうしたらいいのでしょうか? 今現在の状況は テーブルは顧客リスト、送付物、問合せがあり顧客IDでリレーションになっています。フォームはそれぞれ作りました。 メインフォームは顧客フォームで問合せのサブフォームが組み込まれています。送付物フォームはボタンでクリック時開くようマクロで作成しました。where条件は[顧客ID]=[Forms]![顧客リスト]![顧客ID]となっています。 例えば手紙を送ることになり、顧客フォームで該当者を選択→ボタンをクリックし送付物フォームを開く →顧客IDを入力→その他必要事項を入力というかんじです。 顧客IDを入力しないと『フィールド顧客IDとキーが一致しているレコードをテーブル顧客リストで探すことはできません』とエラーになります。 問合せのサブフォームは顧客IDでリンクフィールドとなっています。 ID表示が必要ないので顧客IDは消してあります。 こちらは顧客フォームで該当者を選択し、顧客IDを選択しなくても入力すると問合せテーブルに顧客IDも反映されています。 問合せのように送付物にも顧客IDを選択しなくても反映させるようにするにはどうしたらよいでしょうか? 説明がわかりづらいとは思いますが、お分かりになる方よろしくお願い致します。

  • ACCESS。よろしくお願いします。VLOOKUP??

    いつもお世話になっています。よろしくお願いします。顧客管理で困っています。 管理テーブル ID 日付 顧客番号 顧客名 性別 顧客テーブル ID 顧客番号 顧客名 性別 管理フォーム ID 日付 顧客番号 顧客名 性別 そこでお聞きしたいのですが・・ 管理フォームの入力で 顧客番号入力したら 顧客名 性別 を自動で引っ張ってきたいのですが・・ どうしたらできるかわかりません。 よろしくお願いします。 本等かってきましたが・・行き詰っています。 お勧めの本などありましたら教えていただけましたら幸いです。

  • 「日付条件」のDELETEできない

    access2003で、下記のプログラムを作りました。 コメント文の、「jyuu条件」ではDELETEが出来るのですが、 本プログラムの「日付条件」では、DELETEされません。 なぜでしょうか? なお、gatuは、「日付/時刻型(日付(標準))」です。 Private Sub テーブル削除() Dim db As Database Dim mysql As String Dim gappi As Date Dim jyuu As Integer gappi = #4/15/2011# jyuu = 220 'mysql = "DELETE FROM fff WHERE jyu <" & jyuu & " ; " mysql = "DELETE FROM fff WHERE gatu <" & gappi & " ; " Set db = CurrentDb db.Execute (mysql) db.Close End Sub

  • パススルークエリ&ACCESSテーブル VBA抽出方法

    ACCESSパススルークエリでSQLサーバーのテーブルからデータをインポートする場合において ACCESSのテーブルにあるデータを抽出条件としたいのですがSQL文の記述方法がわからなくて困っております。 根本的な考え方が間違っている可能性が高いのですがどのように記述したらよいか教えていただけますでしょうか。 よろしくお願いいたします。 ・SQLサーバーのテーブル名(S_USR)   USRID  MAIL   10001  10001@test.com   10002  10002@test.com   10003  10003@test.com ・ACCESSのテーブル名(T_USR)   USRID   10001   10003 ・パススルークエリ名(Q_USR)←ACCESS上 ・欲しい結果(T_RESULT)←ACCESS上のテーブル   USRID  MAIL   10001  10001@test.com   10003  10003@test.com 自分で考えたVBAです。 Private Sub Command1_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim qDef As QueryDef Dim tDef As TableDef Dim SQLD As String Dim SQLA As String Set db = CurrentDb 'ACCESSテーブル内のデータを消す SQLD = "DELETE * FROM T_RESULT" DoCmd.RunSQL SQLD 'クエリの更新 db.QueryDefs.Delete "Q_USR" Set qDef = db.CreateQueryDef("Q_USR") 'ODBC接続実施 qDef.Connect = "ODBC;" 'フォームから取得したパラメーターを使ったクエリの設定 qDef.SQL = "select USRID, MAIL from S_USR where ID.USRID=S_USR" qDef.ReturnsRecords = True Set rs = qDef.OpenRecordset(dbOpenSnapshot,dsbSQLPassThrough,dbReadOnly) '追加クエリ SQLA = "INSERT INTO T_RESULT (USRID, MAIL) FROM Q_USR (USRID, MAIL) DoCmd.RunSQL SQLA rs.Close db.Close MsgBox "終了" Exit Sub End Sub

  • AccessSQL COUNT文で該当レコード抽出したい

    初心者です。 Access2000であるテーブルの条件に一致した レコード件数を抽出するSQLを作成しました。 条件に該当しない場合も1件で件数が戻ってきてしまいます。 AccessクエリでSQLを貼り付けて 検証した場合はちゃんと0件になるのですが VBAのコードではうまく件数が抽出されません。 簡単なことだったらごめんなさい。 いろいろなサイトで探した末、 どうしても解決できないので ご教授よろしくお願いします。 Dim strSQL As String Dim db As DAO.Database Dim rs As DAO.Recordset  Dim IntCount As integer 'SQL文を生成 strSQL = "SELECT COUNT(*) AS 件数 FROM テーブル名 " strSQL = strSQL & "WHERE テーブル名.コード = '" strSQL = strSQL & Forms![フォーム名]![txtコード] strSQL = strSQL & "' AND Left([テーブル名]![区分],1) = '" strSQL = strSQL & Forms![フォーム名]![cnb種類].Column(0) strSQL = strSQL & "' AND テーブル名.名称 = '" strSQL = strSQL & Forms![フォーム名]![txt名称] strSQL = strSQL & "';" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) IntCount =  rs.RecordCount rs.Close Set db = Nothing Set rs = Nothing

  • クエリーの抽出条件、テーブルの構成について

    LIbreoffic Base を使用しています。 クエリーでの抽出仕方を教えてください。 <例> 複数の顧客がいます。 顧客Aが1つの店舗で商品を購入した場合に合計金額に対して割引はありません。 顧客Aが2つの異なる店舗で同一日に商品を購入した場合に各店舗毎の合計金額を合算して10%の割引を行います。 顧客Aが3つの異なる店舗(以上)で同一日に商品を購入した場合に各店舗毎の合計金額を合算して20%の割引を行います。 テーブルからクエリーで抽出して 結果として顧客ごとに日別、月別、年別に 顧客 日付 金額の明細と金額の合計 割引額の明細を作成したい。 テーブルの構成 顧客テーブル  顧客ID 顧客名 商品デーブル  商品ID 商品名 商品単価 店舗テーブル  店舗ID 店舗名 明細テーブル  明細ID 顧客名 店舗名 商品名 日付 金額 各テーブルのプライマリーキーは顧客名、商品名 店舗名 明細IDです。 質問ですが 顧客名 日付 店舗名、金額の明細と金額の合計 割引額を日別、月別、年別に抽出し計算するしかたを教えてください。 特に各顧客か同一日に購入した店舗数によって割引率が異なるので、これをクエリーの抽出条件としてどう表現し明細にしたらよいかで行き詰っています。 テーブルの構成にはこだわっていません。変更すべき箇所があれば指摘してください。 よろしくお願いいたします。