• ベストアンサー

Access クエリ抽出条件の「Between」の記述で

こんにちは。Access2000を使用しています。 「抽出条件」フォーム上のテキストボックス "txt開始コード"と"txt終了コード"の入力条件を 「抽出」選択クエリの抽出条件として Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] 記述しました。 抽出条件は「業務データ」テーブルの"業務コード" に対応しており、「業務コード」はテキスト型長さ4 で定義してありますが、「0000」~「9999」の数値 が格納されています。また、フォーム上のテキストボックスの書式は「0000」としています。 条件を何も入力しない時はデータを抽出しますが、条件 を指定すると何も抽出されなくなってしまいます。条件 の指定を、 Between '[forms]![抽出条件][txt開始コード]' And '[forms]![抽出条件][txt終了コード]' のようにシングルクォーテーションで囲んでもうまくいき ません。文字列なのに数値が入っているのでアクセス側で 自動認識しうまくいかないのか、検討がつきません。 どなたか解決策をお願いいたします。

  • enako
  • お礼率62% (298/476)

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

No.2で既に回答が出ていますが、補足を。 >フォーム上のテキストボックスの書式は「0000」としています。 この「書式」と言うのは「見た目だけ、この形で表示してね」を意味します。 ※※※この「見た目だけ」と言うのが重要※※※ ですので、テキストボックスに「1」を入れると「見た目だけ『0001』だけど、中身は『1』のまま」と言う状態になります。もちろん「4」も見た目だけ「0004」で中身は「4」のままです。 この状態では 業務コード Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] とやっても、実際に実行される抽出は 業務コード Between 1 And 4 ですので、No2さんが書いたように >もちろん、 > >0001 >0002 >0003 >0004 > >を BETWEEN 1 AND 4 では抽出できません。 と言う事になり、抽出が成功しません。 そこで、テキストボックスの「更新後処理」にコードを追加し >Private Sub txt開始コード_AfterUpdate() >  Me.txt開始コード = Format(Me.txt開始コード, "0000") >End Sub > >としないと検索しませんよ! と言う処理で「見た目と一緒に中身も4桁に」変えてあげる必要があるのです。

enako
質問者

お礼

chie65536さん、こんにちは。 FormatプロパティとFormat関数の区別を認識できました。 とても参考になりました。 どうもありがとうございました。

その他の回答 (4)

noname#254177
noname#254177
回答No.5

Between [Forms]![本日の伝票]![伝票開始番号] And [Forms]![本日の伝票]![伝票終了番号] 私が使っているのが上記のものですが、うまく動いています。 Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] これを Between [Forms]![抽出条件]![txt開始コード] And [Forms]![抽出条件]![txt終了コード] 書き換えてみてください。

enako
質問者

お礼

hot_dragon1955さん、こんにちは。 試してみたのですがうまくいきませんでした。 hot_dragon1955さんのものとはどこか設定箇所が 異なるかもしれませんね。 どうもありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

クエリでフィールド欄に 抽出:CLONG([業務コード]) として数値化して、その抽出条件欄に Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] では駄目でしょうか?

enako
質問者

お礼

mshr1962さん、こんにちは。 CLONGという関数初めてみました。 まだまだ知らないことだらけです。 どうもありがとうございました。

noname#22222
noname#22222
回答No.2

SELECT 業務データ.ID, 業務データ.業務コード, * FROM 業務データ WHERE (((業務データ.業務コード) Between Forms!抽出条件!txt開始コード And Forms!抽出条件!txt終了コード)); で抽出しますね! もちろん、 0001 0002 0003 0004 を BETWEEN 1 AND 4 では抽出できません。 書式指定を@@@@に変更し、 Private Sub txt開始コード_AfterUpdate()   Me.txt開始コード = Format(Me.txt開始コード, "0000") End Sub としないと検索しませんよ!

enako
質問者

お礼

s_huskyさん、こんにちは。 書式指定は所詮「みかけ」だったということに 気付きました! どうもありがとうございました。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

Between "'" & [forms]![抽出条件]![txt開始コード] & "' AND '" & [forms]![抽出条件]![txt終了コード] & "'" ですね。

enako
質問者

補足

bonaronさん、こんにちは。 試してみましたが、 「キーワードAndが指定されていません。」 となりました。因みに、 Between "'" & [forms]![抽出条件]![txt開始コード] & "'" AND "'" & [forms]![抽出条件]![txt終了コード] & "'" もうまくいきませんでした。 引き続きよろしくお願いいたします。

関連するQ&A

  • AccessでBetween条件を含むクエリーで、Between条件を

    AccessでBetween条件を含むクエリーで、Between条件を入力しなくてもデータを抽出するには? Access97でデータの抽出を行いたいと思います。 「顧客名」「商品名」「出荷日」という項目を含むクエリーから、希望のデータを抽出するフォーム(名:検索フォーム)を作成しています。 検索フォームにそれぞれ「顧客名」「商品名」「出荷開始」「出荷終了」という名前の非連結のテキストボックスを作り(規定値を"*"にしています)、それに値を入力すると、これらのテキストボックスの下に配置したサブフォームに抽出されたデータが抽出される様にしたいのです。 現在、クエリーの「顧客名」項目の抽出条件に「[forms]![検索フォーム]![顧客名]」という様に入力し、同じ様な記述を「商品名」項目にも行い(条件は[商品名]としています)、出荷日に「Between[forms]![検索フォーム]![出荷開始]And[forms]![検索フォーム]![出荷終了]」と記述しています。(これらは全てAnd条件にしています) さて、この検索フォームの値入力項目で、全てのテキストボックスに入力しなくても(1つ以上値が入力されていれば)データをサブフォームに抽出できるようにしたいのです。 現在、「出荷開始」&「出荷終了」に値を入力すれば、その他の値(「顧客名」と「商品名」)を入力してもしなくてもデータが抽出できますが、「出荷開始」&「出荷終了」を入力しない限りデータが抽出されません。 この「出荷開始」&「出荷終了」を入力しないケースでもデータが抽出できる様なフォームを作成したいのですが、 どの様に記述を変えたらよいでしょうか?

  • アクセス2000 クエリ抽出でBetweenを記述したところ・・

    Between [Forms]![frm○△○]![対応日開始入力] And [Forms]![frm○△○]![対応日終了入力]のように記述したところ、開始・終了を入力しないと何も表示されません、入力すると上手く抽出します、未入力の場合全レーコード表示にしたいと考えています、初歩的な質問で恥ずかしいのですがどなたか教えてください。

  • ACCESS  クロス集計クエリの抽出条件について

    http://www.accessclub.jp/samplefile/samplefile_39.htm 上記サイトのクロス集計クエリのやり方で、抽出条件を Between [Forms]![フォーム1]![開始日] And [Forms]![フォーム2]![終了日] とする場合、 クエリパラメータダイアログにはどう記述したらよいのでしょうか? [Forms]![フォーム1]![開始日]と[Forms]![フォーム2]![終了日]をそれぞれ別々にテキスト型としてもエラーですし、(「式が複雑です」とのエラー) 条件を全て記述しても、「かっこの使い方が正しくありません。」とのエラーです。 何が間違っているのでしょうか?

  • Accessクエリの抽出条件にフォームから挿入する方法(2)

    フォームにいくつかの抽出条件を指定するためのテキストボックスをセットし、そこに入力されたデータをクエリの抽出条件に挿入しデータ抽出を行っておりますが、たとえば販売期間でデータを抽出するために、クエリの抽出条件に Between [Forms]![フォーム名]![売上日FROM] And [Forms]![フォーム名]![売上日TO]と入力しているのですが、テキストボックスに指定日付が入っていれば問題なく抽出できるのですが、販売期間の指定なしの場合、売上日from及び売上日TOがNULLとなるためか抽出結果がゼロ件になってしまいます。 期間指定なしの場合でも抽出ができるようにするためにはどのように記述すればよいか教えてください。よろしくお願いいたします。

  • フォームからクエリの抽出期間を指定するにあたって

    フォームのテキストボックス(開始日付,終了日付)に入力された期間内の レコードをクエリで抽出するために、以下のような抽出条件を設定しています。 Between [Forms]![フォーム1]![from date] And [Forms]![フォーム1]![終了日付] ここまでは問題なく出来ています。 ですが、例えばテキストボックスに何も入力していないときに、 全ての期間から全件表示させるような方法はありませんでしょうか? IIf(IsNull([Forms]![フォーム1]![開始日付]),True,~ というような形で、IIfとIsNullの組み合わせも考えたのですが、 日付は直接フィールドでは無く抽出条件のため、 Trueより後が設定できずに悩んでおります。 出来ればVBAは使いたくないのですが、 何か良い方法はありませんでしょうか?

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

  • クエリーの抽出条件について

    「作表条件」というフォームにテキストボックスとして「日付1」、「日付2」を設置しています。 元のテーブルには「日付」という項目があり、「日付1」から「日付2」までのデータを抽出するため、 クエリの条件式に Between Nz([Forms]![作表条件]![日付1],#1800/01/01#) And Nz([Forms]![作表条件]![日付2],#9999/12/31#) と記述しています。 ただ、元のテーブルの日付がNULL値の場合があり、その場合「日付1」および「日付2」が空欄だとNULL値のレコードが抽出されません。 「日付」がNULLの場合でも抽出できるようにするには、どのようにすればよいでしょうか? どなたか教えてください。

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • ACCESSでのクエリ抽出条件について

    ACCESS超初心者です。 自分なりに調べたのですが、知識不足によりお手上げ状態です。 クエリの抽出条件について、どなたかご教授いただけますでしょうか? OS:XP ACCESS:2000 ・フォーム上に自由に入力できるテキストを3つ用意します。 ・入力された3つのテキストが1つのフィールドに含まれるものをクエリで抽出したい。 ・3つのテキストが空欄の場合は全てのデータを抽出したい。 ■フォーム上のテキスト  テキスト1:テキスト10  テキスト2:テスト11  テキスト3:テスト12 ■テーブル  フィールド1:問合せ内容(1) ■クエリ内の抽出条件 Like "*" & [Forms]![F_検索テスト]![テキスト10] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト11] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト12] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

専門家に質問してみよう