- 締切済み
教えて!アクセス2007!/Access2007・期日指定で表示させる
教えて!アクセス2007!/Access2007・期日指定で表示させる方法 データーの日付は テキスト型で定型入力を>L99\年99\月99\日と設定し このように表示させてます→ H20年03月26日 このデーターからH20年03月26日からH22年07月31日までの 抽出方法を教えて下さい。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
訂正です。 >説明の通りSQLにコピーして貼り付けてみるのですが >うまくいきません の原因だと思いますが、#4において、 ############################ 名前を Q期日指定 とします。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([日付],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); ############################ としていましたが、中の[日付]を[納品日]にするのを 忘れていました。したがって、 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); が正しいです。確認しておいてください。 これで動作すると思います。 フォームで表示したい、ということなので設定の手順を 述べます。 (1) クエリの作成 Q期日指定と同じ内容ですが、フォームの名前を 変えておきます。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between "H20年01月01日" And "H20年01月01日")); これで新規にクエリを作り、名前を「Q期日検索」としてください。 (2) フォームの作成 フォームの新規作成から、「オートフォーム表形式」を 選択し、「基になるテーブルまたはクエリの選択」で 「Q期日検索」を選択し、出来たフォームの名前を 「F期日検索」として保存してください。パラメータが 表示されますが (3) フォームの調整1 出来たフォームをデザインビューで開き、詳細のところに カーソルを当て、十字になったらクリックして下に3cmくらい 押し下げてください。ついでにラベルも下に移動させてください。 フォームの幅は適度に広くしておいてください。 空いたところに、テキストボックスを二つ、ボタンを 二つ設定してください。 テキストボックスの名前はそれぞれ、 「tx開始日」と「tx終了日」 にしてください。 それぞれのテキストボックスの定型入力に L99\年99\月99\日;;_ を貼り付けてください。 (4) フォームの調整2 二つのボタンの名前をそれぞれ、 「cmd抽出」と「cmd解除」 にしてください。 フォームのコード表を開き、以下を貼り付け 保存してください。 Private Sub cmd解除_Click() Me.RecordSource = "SELECT * FROM T日付 WHERE (((Format(CDate(Format([納品日],'@@@@\/@@\/@@')),'gee\年mm\月dd\日')) Between 'H20年01月01日' And 'H20年01月01日'))" End Sub Private Sub cmd抽出_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Me.RecordSource = "SELECT * FROM T日付 WHERE (納品日 Between '" & Me!tx開始日 & "' AND '" & Me!tx終了日 & "')" End Sub (5) フォームの調整3 フォームのレコードソースのところに Q期日検索 と表示されていますが、これを消して、 改めて、(1) クエリの作成 のところにある「Q期日検索」のSQL文を コピーして貼り付けてください。 これにより、「Q期日検索」はいらなくなるので 削除してもかまいません。 以上で設定終了です。フォームを開いたときに はフォームのコントロールソースで Between 'H20年01月01日' And 'H20年01月01日' としているように特定の日を表示するように しておき、フォームにすべてのデータを表示 しないようにしておきます。選択したときに 選択したデータが表示されます。 cmd解除を押すと開いたときと同じになります。 もし、H20年01月01日の日付がテーブルに なければ何も表示されません。
- piroin654
- ベストアンサー率75% (692/917)
フォームのテキストボックスを参照して 期日をしぼり、クエリを表示する方法 フォームの名前をF検索とします。フォームに テキストボックスを二つ。名前は、 tx開始日 tx終了日 とします。なお、それぞれのテキストボックスの プロパティの定型入力のところに、 L99\年99\月99\日;0;_ を設定してください。 続いて、ボタンを一つ名前を、 cmd検索 とします。 フォームのコード表を開き、以下をコピーし、 貼り付け、保存します。 Private Sub cmd検索_Click() DoCmd.OpenQuery ("Q期日指定") End Sub 次に、以下のクエリを作成します。 名前を Q期日指定 とします。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([日付],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); これは、#3での、 Between [START] And [END] または、 Between "H20年03月26日" And "H22年07月31日" のところを、 Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日] に変更したものです。 このほかにフォームにデータを表示することも できますが、少しややこしい設定が必要に なります。
補足
いつもありがとうございます 説明の通りSQLにコピーして貼り付けてみるのですが うまくいきません (既存のデーターに使ってみました、すると「式が複雑すぎるので簡単にしてください」というような メッセージがでました) できればフォームで表示したいのです 宜しくお願いしまう。
- piroin654
- ベストアンサー率75% (692/917)
一旦、#1と#2はスルーしてください。 説明をし直します。 対象のテーブルを「T日付」とし、テキスト型のフィールド「納品日」 があるものとします。 (1) まず、テーブルの「納品日」はテキスト型ですから、 このままでは日付として計算はできません。方法としては、 「納品日」をフォーマットしてテキスト型を Accessが日付として認識できる「日付型」に 変更して「納品日」を日付として期間の抽出を 行なう方法。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [START] And [END])); このクエリもパラメータが二つ出てきますが、この場合は それぞれのパラメータに、H20年03月26日 と H22年07月31日 を入力すれば、期間が抽出されます。 直接クエリに入力しておくには、 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between "H20年03月26日" And "H22年07月31日")); のようにします。 (2) クエリに条件の入れ方がわからない、ということですが、 まずは(1)のようにテーブルを作ってデータを入れて(1) で表示したSQL文を新しいクエリを作り、そのSQLビューに 貼り付けてみてください。それからデザインビューに戻します。 そうすると、 フィールド | 納品日 | (1) | テーブル | T日付 | | 並べ替え | | | 表示 | | | 抽出条件 | | (2) | または | | | (1)に Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日") (2)に Between [START] And [END] または、 Between "H20年03月26日" And "H22年07月31日" が入っているのが確認できると思います。
お礼
できました! 感激です!ありがとうございます☆☆☆☆☆ クエリで期間限定で表示できるようになりました これをフォーム上で日にち指定するにはどうすれば良いでしょうか? 引き続き宜しくお願いします。
- piroin654
- ベストアンサー率75% (692/917)
訂正です。 クエリの最初、 SELECT T日付.日付, T日付.名前 にいらないものがありました。 SELECT T日付.日付 にしてください。 SELECT T日付.日付 FROM T日付 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])); です。
補足
回答、有難うございます。 初心者のせいか WHERE (((Val(Right(Format([納入日],"yyyy\,mm\,dd"),6))) Between [H20年03月26日] And [H22年07月31日])); ↑ どこに入れたら良いのかわからなくて・・・ お手数おかけしますが、もう少し解り易くお願いします。
- piroin654
- ベストアンサー率75% (692/917)
方法はいろいろあります。VBAを組み込む 方法もありますが、一応一番簡単であろう という前提を勝手において、以下のように。 「T日付」というテーブルに「日付」という フィールドを設定します。主キーである必要 はありません。「日付」フィールドの型と 定型入力は質問の通りとします。 以下のクエリを作ってみてください。 SELECT T日付.日付, T日付.名前 FROM T日付 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])); [START] と [END] はたとえば、 [この日から] と [この日まで] というようにするとわかりやすいかもしれません。 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])) のところでRightは取り出した日付の右から6文字取り出しています。 これは余分なHを取り除くためです。 Valは必要ないかも知れませんが数値型に変換しています。 Formatについてはこれから使われることも 出てきます。Format関数などで調べてみて ください。 このクエリを実行するとパラメータが出てきます。 SARTのパラメータに200326と入れ、 ENDのパラメータに220731といれます。 このような、感じですが、何かフォーム上で 取り出したりするのであれば Between [START] And [END] の部分を変更する必要があります。 場合によってはVBAが必要になります。 何か不都合が生じるようであれば捕捉をしてください。
補足
いつもありがとうございます。 返事遅くなって申し訳ありません ずっとアドバイス通り、がエラーメッセージが次のようにでます 「式が正しく入力されてないか、数式に複雑な要素が多すぎます。 式を簡単にしてください」 色々してみるのですがうまくいきませんでした。 他に方法はあるのでしょうか?