Access初心者の質問 売り上げ集計システムの明細フォームでのチェックボックス表示に関する問題

このQ&Aのポイント
  • Access初心者が売り上げ集計システムを作っている中で、明細フォームでのチェックボックスの表示に関する問題が発生しています。
  • 明細フォームのチェックボックス表示は、大盛や小盛が指定できる商品の行では「true」に、指定できない商品の行では「false」にしたいと考えています。
  • VBAを使用してこの問題を解決しようとしましたが、メインフォーム中の全ての行のチェックボックスの表示が同時に変わってしまうという課題があります。また、ODBCの設定にも問題があるかもしれません。
回答を見る
  • ベストアンサー

ACCESSで

まず始めに。 私はAccess初心者なので、何をどう質問して良いかもはっきりは分かりません。何か、足りない部分があれば書いて下さい。 喫茶店の売り上げ集計(メニュー別&顧客別)等のシステムをAccess2002で作っています。 と言っても、まだ始めのほうで詰まってしまっての質問です。 商品テーブル、商品の中分類テーブル、大分類テーブル、売上伝票テーブル、明細テーブルと在り、商品登録クエリ&フォーム、売り上げ登録クエリ&フォーム、明細登録クエリ&フォームがあります。 売り上げ登録フォームは、売り上げ伝票としています。 明細登録フォームは売り上げ登録フォーム(メイン)のサブフォームとしてあります。 メインフォーム上に入力日、販売日、顧客名(IDからクエリで引いてきます。)等をテキストボックスやコンボボックスなどで入力します。 伝票IDはオートナンバー型で指定し、それをサブフォーム上のIDに代入して登録しています。 大分類で飲み物と食べ物を分け、中分類で、『ホット系・アイス系・生ジュース系・カレー系・・・・軽食系・ケーキ系』等と分かれており、カレー系から軽食系までは、大盛小盛が指定出来るのですが、これを明細フォームでチェックボックスで入力しています。 問題はここからで、帳票形式の明細フォームで入力しているのですが、大盛、小盛が指定出来ない物の行のチェックボックスの『visible』を「false」にし、大盛、小盛が指定出来る物の行のチェックボックスの『visible』は「true」にしたいと想い、VBAで組みました。が、レコードセットを使わないとメインフォーム中の全ての行のチェックボックスの『visible』が同時に変わってしまいます。 windowsXPのコントロールパネルのODBCの設定もおかしいかもしれませんがどうしても分かりません。 基本的な事なのかもしれませんが、よろしくお願いします。

noname#9808
noname#9808

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

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.3

ADOなどでのデータセットの仕方は例えば以下の本の97ページに載っています。 http://www.amazon.co.jp/exec/obidos/ASIN/4816332952/250-4912886-7132269 ネットで聞くよりは、こういう書籍をあたった方が絵つきでわかりやすいと思います。 ただし、ADOなどでレコードセットを作ってやる場合は、例えば以下のような構造にしないといけないと思います。 ・親フォームに売上の基本情報を入力 顧客名(または客層)、レジ打ち者名 日付など ・サブフォームを親フォームに埋め込む こちらは注文メニューの詳細内容です。 ここに数行の帳票フォームとなります。 ・親フォームに「次へ」「前へ」ボタンなどを作成し、 サブフォームの内容が例えば10件ずつ表示される ようにする。 (ただし、注文数が絶対に20件を越えないなら 最初から20件~30件ほど表示できるように すればこのようなボタンは要りません) ・フォームを開くと同時に最初の10件を読み込み ・親フォームに「登録」ボタンをつくり、売上登録時には そのボタンを押す(裏ではADOなどで売上登録させる) などなど、結構面倒くさいです。 ですので、変わりの方法として、『visible』=「true」は使えませんが、次のような方法はどうでしょうか? ・商品マスタにチェックボックスのフィールドを増設し、大盛り等ができる商品にチェックをつけておく。(フラグがわりです) ・帳票フォーム上にはそれとは関係なくチェックボックス を配置(売上登録用のチェックボックスです) ・売上登録時の商品ID(もしくは商品名)入力時に、その商品の大盛り等チェックフィールドの値を調べに行く(DLookup関数などで) ・商品マスタの大盛りのチェックがONなら、大盛り等OKなので、その売り上げ帳票フォーム上の チェックボックスに普通に入力できるようにします ・逆に、商品マスタのチェックがOFFなら、その売り上げ帳票フォーム上の チェックボックスに入力できないようにします。 入力できないようにするには、そのチェックボックス 更新前イベントに以下のようなコードを書きます。 If DLookup("大盛り等できる出来ないのチェックボックスフィールド名","商品マスタテーブル名") = vbYes Then Else Cancel = True Me!帳票フォーム上のチェックボックス名.Undo End if この状態で、帳票フォーム上のチェックボックスに値を入れようとすると、大盛り等ができないメニューの場合は、 「Cancel = True」という行と 「Me!帳票フォーム上のチェックボックス名.Undo」という行のところで、値を入れても強制的にもとにもどされてしまいますので、結果として、大盛り等にできない形になります。ですので入力ミスはこれでかなり減ると思います。 なお、帳票フォーム上のチェックボックスの更新後イベントに Me!帳票フォーム上のチェックボックス名 = Me!帳票フォーム上のチェックボックス名.OldValue などと書いても元の値に戻り、値の変更ができなくなります。 その後、どこか別のテキストボックスなどに、SetFocusで強制移動させるなどしても良いと思います。 もし、現在の、『visible』=「true」が単に入力ミスを無くすだけの目的でしたら、以上のような方法もあると思います。 とりあえず思いついたのをぱっと書いただけですので、もっと他の方法もあると思います。 詳しくはヘルプや、他の掲示板、メーリンスリストなどの過去ログもあたってみてください。

noname#9808
質問者

お礼

丁寧なお答え有難うございます。 ここの文章を読んでいるだけでは分からない部分もありますが、その部分は自分で試しながら解決していきたいと思います。 貴重なご意見有難うございました。

noname#9808
質問者

補足

お礼を書いてしまってから、よく見直してみたのですが、新たな疑問が湧いてしまいました。 たとえば、 大盛等が出来る商品の中分類IDの範囲は決まっていますので、 それをフラグ代わりに使えないのでしょうか? あと、これは確認ですが、サブフォームにはチェックボックスが大盛用と小盛用、 2つ有るのですが、両方とも同じ式を入れれば良いですよね。 もうひとつ。 書いて頂いているif文にはthen以下が見当たらないのですが、これで大丈夫なのですね? 昔、N80-BASIC・N88-BASICをやっていて、古い書き方しか知らないもので.... お気に障ったら申し訳ありません。 ご紹介頂いた本も参考にしてみます。 有難うございます。

その他の回答 (3)

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.4

>書いて頂いているif文にはthen以下が見当たらないのですが、これで大丈夫なのですね? はい。とりあえずそうです。「何もしない」ということを明示的にしました。逆の書き方もできると思いますけど・・・。すみません。わかりにくくて。 >あと、これは確認ですが、サブフォームには >チェックボックスが大盛用と小盛用、 >2つ有るのですが、両方とも同じ式を入れれば良いですよね。 はい。そうです。 >大盛等が出来る商品の中分類IDの範囲は決まっていますので、 >それをフラグ代わりに使えないのでしょうか? ですが、 >カレー系から軽食系までは、大盛小盛が指定出来る ということですと、できますね。(^^) If DLookup("中分類フィールド名","商品マスタテーブル名") = "カレー" Then '何もしない(これはコメントです。) ElseIf DLookup("中分類フィールド名","商品マスタテーブル名") = "スパゲティ" Then '何もしない(これもコメントです。) Elseif・・・(以下、条件の数だけ同様に) ・ ・ ・ Else Cancel = True Me!帳票フォーム上のチェックボックス名.Undo End if みたいな感じでしょうか・・・ もっと良い書き方があるとは思いますが・・・ >昔、N80-BASIC・N88-BASICをやっていて、古い書き方しか知らないもので.... お気に障ったら申し訳ありません。 とんでもございません~。 僕の方こそへんな書き方で・・・ 書き方は初心者同然ですからあまり参考にしない方が よいかもしれません(^^) 検証したわけではないので、どこか、間違ってたら ごめんなさい。

noname#9808
質問者

お礼

お礼が遅くなってしまって、申し訳ありません。 問題の部分ですが、お答えを見ている時に、ふと、「『チェックボックス』ではなく『オプションボタン』ではどうだろう。」と思いまして、試してみました。 フォーム『明細』中に三つのオプションボタンを配置し、それぞれ[小盛]'-100'[普通]'0'[大盛]'100'と、オプション値に割り引き・割り増し金額をそのまま入れておくのです。 盛りを指定出来ない時は、強制的に0を入れるようにしました。 Dim morichk As Integer: morichk = Forms![F_売上伝票]![明細].Form![gr_盛り] Dim chuubunrui As Integer: chuubunrui = CInt(Forms![F_売上伝票]![明細].Form![商品ID].Column(4))        ・        ・        ・ If chuubunrui > 2 And chuubunrui < 9 Then      mori = morichk Else      mori = 0      Forms![F_売上伝票]![明細].Form![gr_盛り] = mori End If 上記の中身はどうでも良いのですが、何とかこれで盛りでの入力ミスはなくなりました。 皆様からの色々な考え方やアドバイスのおかげです。有難うございました。 まだまだ完成には程遠いものですが、何とかやっていけそうな実感が湧いてきました。 また、質問させて頂くかもしれませんが、その時はよろしくお願いします。 皆様へのお礼に代えさせて頂きます。

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.2

>レコードセットを使わないとメインフォーム中の全ての >行のチェックボックスの『visible』が同時に変わって >しまいます。 ところから察しますに、 > 帳票形式の明細フォーム というのは。フォームプロパティの「既定のビュー」が 「帳票フォーム」になっている状態のことですよね? 多分・・・ これですと、1行分のプロパティ設定が繰り返し同じ設定 で表示される形式ですので、1つのテキストボックスや チェックボックスの設定が、全ての行のそれに適用されて しまいます。 したがって、帳票フォームの各個別の行に、例えば、 「テキストボックスAの値が●●だったら、チェックボック スの『visible』を「true」にする」などのプロパティ設定は不可能だと思います。 全部の行が『visible』=「true」になります。 値そのものを行ごとに変更することはもちろん出来ますが。 コントロールのプロパティ設定は全ての列に同じ 設定がなされてしまいます。 ですので、条件別に1行ずつ違うプロパティ設定にしたいときは 非連結フォームに例えば10行分のコントロールを用意して、 ADOかDAOでレコードセットを生成し、そこへレコード セットの内容を表示するパターンでないとだめなような 気がします。 もしくは帳票フォームはあきらめて、単票フォームにするとか・・・。 違ってたらごめんなさい。 僕も過去に何度も調べてヘルプ・WEBなども参照しましたが、解決方法 は見つかりませんでした。 バージョンアップでこれを可能にして欲しいなと 思いましたが、条件付き書式を設定時の表示速度などを 見ますと、やはり表示速度が遅くなるので、 それでマイクロソフトはやらないのかな?という風に 推測しています。

noname#9808
質問者

補足

お返事ありがとうございます。 >というのは。フォームプロパティの「既定のビュー」が >「帳票フォーム」になっている状態のことですよね? >多分・・・ そうです。その通りです。 >ですので、条件別に1行ずつ違うプロパティ設定にしたいときは >非連結フォームに例えば10行分のコントロールを用意して、 やっぱりこうですかね...... >ADOかDAOでレコードセットを生成し、そこへレコード >セットの内容を表示するパターンでないとだめなような >気がします。 そのレコードセットの組み方自体が分からないのです。基本的な事ですが... >もしくは帳票フォームはあきらめて、単票フォームにするとか・・・。 一枚の伝票を一人分(代金を払ってくれるお客様一人)としていますので一人で何個頼むかは分かりません。ですので、何行でも追加出来、一目で見通せる帳票フォームにしているんです。修正もし易いですし。 しかし、もう少し調べてだめなようなら単票にするしかないかなと思っております。

  • yosa
  • ベストアンサー率16% (28/170)
回答No.1

正直・・・イメージができません。 要点だけをまとめてほしいのですが、私なりの解釈として 「大盛り小盛りの選択肢のあるメニューだけに、チェック ボックスを表示したいが、なぜか全てのメニューにチェック ボックスがついてしまう」 と言う風に読み取りましたがあたっていますか?。

noname#9808
質問者

補足

早速有り難うございます。 >と言う風に読み取りましたがあたっていますか?。 はい。当たっています。 本当は『不可視』ではなく『薄い表示&更新不可』にしたいのですが.......

関連するQ&A

  • access2003

    2000種ほどの商品を扱っています。商品コードひとつにつき、仕入先・取引先が1箇所ずつ決まっていて、値段の変化もあまりありません。伝票を見ながら、フォームから直接売上入力を行い、請求処理と売上分析に利用したく思います。 ◆親)売上入力フォーム:売上管理番号/日付/取引先/取引先伝票番号/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付/取引先伝票番号 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 入力の効率化を図るため、1部品1取引先であることを利用して、親フォームで取引先を選択することで商品を絞り込み、子フォームの商品選択コンボボックスにはその取引先の商品だけが表示させるようにしたいと思います。どのような方法が考えれるでしょうか? クエリを使うのだと思いますが、いろいろ試しても失敗してしまいます。 また、その上でさらなる絞込みとして、明細の各行で各商品を選択する際に、商品コードの一部を入れたり、仕入先名を入れると部品が絞り込めるようにできないでしょうか? アドバイス、参考資料、なんでもお寄せください! どうぞよろしくお願いいたします。

  • ACCESSで複数条件でデータ抽出するフォームの作成

    ACCESS2000で複数の条件を入力し、該当するデータを抽出するフォームを作成しています。どんな方法がありますか?簡単に出来る方法をお教えください。 具体的には、売上明細データを検索します。あらかじめ テーブル:売上明細データ をいろいろなマスタを参照している クエリ:売上明細クエリ を元に抽出します 条件は売上日付の日付1と日付2の項目と、伝票区分の項目です。 フォームの頭にテキストボックスを3つ作成し、日付1~日付2までの売上日付で 入力された伝票区分のもののみを表示させたいのです。 検索というコンボボタンを配置し、クリック時にその下にクエリからの必要な表示項目を売上明細クエリから配置しています。 抽出する方法(条件の与え方)を教えてください。よろしくお願いいたします。

  • Accessのフォームでの合計欄を二つにわけたい

    テーブル1;売上明細T フィールド名;売上明細番号、商品コード、数量、摘要 テーブル2;商品T フィールド名;商品コード、商品名、単価 クエリで売上明細と商品Tをつなぎ、下記のように表示します。 商品コード 商品名 摘要  数量  単価 明細計                  (数量*販売単価) 001    物件1  作業代  1  500 500 002    物件2  作業代  2  400 800 051    物件51  作業代  1  500 500 051    物件51  交通費  1  350 350  上記クエリを元にフォームを作成(帳票形式)して、 テキストボックスで課税対象計(作業代計)と、非課税対象計(交通費計) のボックスをもちたいのですが可能でしょうか? 最終的には、売上伝票フォームに売上明細フォームをサブフォームで 取り込み、売上伝票上で合計金額を表示させたいと思っています。 よろしくお願いします。

  • access2003 複数のフォームから入力したデータに通し番号を付けてストックしたい

    初心者の恥ずかしい質問かもしれないので申し訳ありませんが、自力で解決できないのでアドバイスをお願いします。 伝票入力画面を作っています。  ◆親)売上入力フォーム:売上管理番号/日付/取引先/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 伝票が数種類あるため、それぞれの伝票を画像として取り込んで複数の入力画面を作り、入力しやすくしようと思っています。 このとき、各フォームから入力したデータを、オートナンバーでひとつの売上入力/明細テーブルにストックしていくにはどうしたらよいでしょうか? よろしくお願いします。

  • access2003 抽出条件が持ち越されてしまう

    http://okwave.jp/qa3580875.html ↑にて質問させていただいた者です。  一部繰り返しになりますが、2000種ほどの商品を扱っています。伝票を見ながらフォームから直接売上入力を行いたく思います。 ◆親)売上入力フォーム:売上管理番号/日付/取引先/取引先伝票番号/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付/取引先伝票番号 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 子フォームで商品コードのフィルターとして、 1)親フォームで選択した取引先の商品のみ→[Forms]![売上入力フォーム]![取引先]を導入 2)ワイルドカード「Like "*" & [商品コードの一部を入力] & "*"」 のふたつを使っていますが、うまく動作してくれません。 いったん商品コードを選択すると、明細の次の行に移動しても取引先選択のポップアップが出ず、コンボボックスには同じ選択肢が提示されます。さらに、新しいレコードに移動してもポップアップなし&同じ選択肢が続きます。 この状態を回避する方法を教えてください。 長くなりましたが、どうぞよろしくお願いします。

  • ACCESS 追加クエリでレコード数の指定したい

    Win XP Access2003 見積伝票を作成しております。サブフォーム(帳票フォーム)の登録方法でご教授お願い致します。 "伝票明細テーブルW"(伝票番号,行番号,内容、数量、単価、・・・)を基にした "伝票明細クエリW"を作成し、入力しやすいようにフォームを開いた時に行番号(連番)を振り、30行表示するようになっています。 入力確認後に登録ボタンをクリックして追加クエリを開き"伝票明細テーブルW"から"伝票明細テーブル"に30件レコード保存するようになっているのですが、 場合によって内容が2~3行で終わる時があります。 このような時に無駄に30行のレコードを保存せず"内容"(フィールド)が入力されているの最終レコードまでで伝票明細テーブルに追加したいのですが、よい方法がありましたら宜しくお願い致します。 "内容"(フィールド)は途中に空白の時があります。 行番号    内容        数量  1     オイル交換      3.0  2  3     タイヤ交換       4.0

  • ACCESSのリストボックス抽出について

    ACCESSにおいて、住所録テーブルを用意します。 フォーム上で県、市のリストボックスを作ります。 住所録テーブルには県と市のフィールドを作り、県名と市名を入力しておきます。クエリを用意し、リストボックスの県で例えば東京を指定するとそれに該当する市が抽出されて市のリストボックスから選択できるようにしたいのですがクエリ上では表示されるのですがリストボックスに反映されません。 どのようにすれば出来るのでしょうか。 (ちょうど教えて!gooで質問する際にカテゴリーの大分類から小分類を選択する時のようにです。)

  • accessでパラメータをフォームで指定しテーブルを作成する方法

    ACCESSでFORMをつくり、そこで条件指定(パラメータ指定)してテーブルを作成しようとしています。 実際は2本のテーブル顧客テーブル・売上明細テーブル両方をクエリで関連づけ、そのクエリに抽出条件を入れれば良いと思うのですがうまくいきません。どのように設定したらいいのでしょうか? 条件は売上日付が xxxx~xxxx という期間指定でさらに(必須) 商品分類が YY で区分が zz のもの という条件をFORMで入れるように設定しています 分類と区分は指定無でも可です どうぞよろしくお願いします!

  • Accessでチェックボックスからの入力を受け付けない

    お世話になります。 Access2003を使い、フォームにチェックボックスを作りました。  チェックボックスの値をテーブルに反映させるために、「チェックボックス」-「プロパティ」-「コントロールソース」より、該当テーブルの列を指定しました。 フォームビューにて、チェックボックスをクリックすると「このフォームは読み取り専用です」と言われ、チェックボックスへの操作は拒否されてしまいます。  どのようにすれば、フォームのチェックボックスから入力した値が、テーブルに反映できるのでしょうか?  なお、該当テーブルの列はyes/no型に指定しています。 よろしくお願いします。

  • アクセス2000のフォームなんですが。

    本を読みながらアクセス2000で売上管理の入力用フォームを作っていますが解らなくなってしまったので、教えてください。売上管理のクエリを引っぱってきてフォームを作ったところ、わたしのクエリは3つのテーブルをリレーして作ったので金額の演算フィールドに式1[○○テーブル]![単価]*[金額]を入れてます。そうすると、フォームで引っぱってきた金額欄が「式1」となっています。テキストボックスやラベルをどのように使えば直せますか?あとラベルでやろうとするとヒラガナでででくるのですがどうしたら漢字変換に変えられますか?もう、とってもパニクってます。助けてください。あと、レポートの用紙サイズの設定変更もおしえてください。お願いします。

専門家に質問してみよう