Access2002で連番のついた納品書を出力したい

このQ&Aのポイント
  • Access2002で複数の注文をまとめ、ユニークな連番を振った納品書を出力したい方法を教えてください。
  • 現在、フォームを使って納品書番号をオートナンバーで振ることは成功していますが、納品対象の注文を選択する方法がわかりません。
  • 納品書の基本単位は従業員ごとで、納品がバラバラに行われることが多いので、注文情報から注文番号で選択してレポートに出力したいです。
回答を見る
  • ベストアンサー

【続続】Access2002で連番のついた納品書を出力したい

1. http://oshiete1.goo.ne.jp/qa5243829.html 2. http://oshiete1.goo.ne.jp/qa5257035.html 上記のように、質問してまいりまして、後一歩まで参りました。 これまでの経緯は下記のとおりです。 1.複数の注文をまとめ、それにユニークな連番を振って納品書を作りたい(これが大元の要望でした) 2.上記質問の中でいただいた回答で、フォームを使って納品書番号をオートナンバーで振ることは成功(私の理解不足で回答者様を振り回してしまいましたが、思うような連番(納品書番号)を自動的に振ることに成功しました) 3.フォームのサブウィンドウ(?)を用いて、納品対象の注文を選択したい(ここでとまっています) テーブルは下記のとおりです。(計4つ) 1.従業員マスタ(データ投入済み) ・従業員コード(テキスト) ・従業員名(テキスト) ・従業員名カナ(テキスト) 2.納品書番号(データはフォームから自動生成) ・納品書番号(オートナンバー) ・納品日付(日付) ・従業員コード(テキスト) 3.注文情報(データ投入済み) ・注文番号(テキスト) ・従業員コード(テキスト) ・商品ID(テキスト) ・数量(数値) ・納品書番号(数値) 4.商品マスタ(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。(画像添付) 次の段階ですが、フォームの中にサブフォーム(?)を作成し、「どの注文で発生した商品を」納品するのか、注文情報テーブルから選択し、レポートにして打ち出したいのです。 納品書の基本単位は従業員ごとですが、納品がバラバラに行なわれることが多く(例:Aさんが1、2、3と注文したとしても、2、だけ先に納品され、1、3が別の日に納品される)、注文情報から「注文番号」で選択できれば。。。と思っています。 前の質問でもお答えはいただいたのですが、私の知識不足でうまく実現できませんでした。 他に、必要な情報がございましたら提示いたしますので、よろしくお願いします。 何卒よろしくお願いします。

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

  • ベストアンサー
noname#182251
noname#182251
回答No.18

だんだん回答することに疲れてきました。もう少し解決するための努力をして欲しいです。当方に依存してばかりでは技術者(プログラマー)として自立できません。 と、これだけでもなんなので。 問題をできるだけ切り分ける(以前にも書いたはず) 1.当該SQL文からクエリを作成し、直接実行する 2.変化がない(0件のレコードが更新されます)ならば、選択クエリに変更して、なぜ0件なるかしらべる 3.クエリが有効ならばVBAが確実に実行されているか、ブレークポイントを設けたり、ステップインで実行してみる

camo-tech
質問者

お礼

大変長らくのお付き合い、ありがとうございました。 なんとか自力でレポートの出力までこぎつけました。 リンクさせるフィールド(納品書番号)をサブレポートのSELECT文の中に埋め込み、リンクさせ、あとは必要なフィールドを貼り付けるだけでうまく行きました。もちろん。グルーピングなども設定いたしました。 途中、大変不愉快な思いもさせてしまい、申し訳ありませんでした。 今後はこのようなことのないよう、気をつけます。 どうもありがとうございました。

camo-tech
質問者

補足

大変ご迷惑をおかけし、申し訳ないです。 このご回答を頂き、自己解決しようと、テストDBを作り、うまく動作したので本番のDBに移しこみ、納品書フォームからレポートを呼び出し、そこには ・顧客名 ・納品日付 ・納品書番号 が表示できるようになりました。 その後、注文の詳細情報をレポートに表示させようと、サブレポートに注文テーブルのサブフォームを貼り付けたりしているのですが、どうもうまく行きません。 親子リンクをうまく設定できずにいます。と申しますか、フォームの親子は「顧客ID」が双方にあったのですんなりいったのですが、レポートはリンクを張るための一致するフィールドがないのです。 なにかお知恵かヒントを拝借したいのですが。。。 何卒よろしくお願いします。

その他の回答 (17)

noname#182251
noname#182251
回答No.17

>D)納品書に記載したい注文にチェックをつけ終了 これでは不充分です。 #10で回答した >>4.そこでコマンドボタンを押下すると、親子とも空白になる このステップがないと必要な書き換えが発生しません >4.に、 >「これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます」 >これがうまく行きません。 >選択のほうを閉じても、呼び出した側の「納品書番号」の表示が変わらないのです。書いていただいたとおりに作業したのですが。。 書き換えが発生していないので、当然ですね

camo-tech
質問者

補足

早速のご回答、ありがとうございます。 コマンドボタンは押下しました。 コマンドボタンの裏のコードは下記のとおりです。 Me.注文テーブルのサブフォーム(選択).Requery DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE 注文テーブル SET 注文テーブル.納品書ID = [Forms]![納品書(選択)]![納品書ID] WHERE (((注文テーブル.納品書ID)=0) AND ((注文テーブル.選択)=True) AND ((注文テーブル.顧客ID)=[Forms]![納品書(選択)]![顧客ID]));" DoCmd.SetWarnings True Me.Requery コマンドボタンを押下しても、納品書番号(選択)、納品書番号ともに表示は変更されません。 一度、納品書テーブルの全レコードを削除し、注文テーブル内の「納品書IDフィールドを全て「0」にしました。 そこで「納品書番号」フォームを起動すると、親も子も何も表示されません(「選択」を呼び出すコマンドボタンすら表示されません)。 「納品書番号(選択)」、を起動し、顧客IDを選択すると、納品書番号が付与され、子フォームにその顧客の注文情報が全て表示されます。 その上で、打ち出したいレコードのチェックボタンにチェックをつけ、コマンドボタンを押下しても、表示は変わりません。 また、その状態で注文テーブルを確認すると、チェックを入れたレコードにチェックは入っていますが、肝心の納品書Noが書き換えられておりません。(「選択」フォームを終了させても書き換えは起こりませんでした) 上記コードの他に、何かご提示すべきものがございましたら、ご指示くださいませ。 よろしくお願いします。

noname#182251
noname#182251
回答No.16

>>3.ウィザードが起動したら >の意味が分かりません。 ツールボックスで、上から2番目の「コントロールウィザード」がオンになっていれば、ボタンをフォーム上に配置した瞬間に「コマンドボタンウィザード」が起動します

camo-tech
質問者

補足

お手数をおかけしております。 また、不愉快な思いばかりさせてしまい、申し訳ないです。 下記ご回答で頂いた手順に沿い、作業を進めております。 いくつか確認させていただきたい部分がございますので、記述させていただきます。 1.この手順どおりにDBを作成すれば、使用者は次のような手順で操作することになるのでしょうか? A)注文情報の打ち込み(既存と同じ) B)「納品書番号」フォームを開く C)「納品書番号」の中のコマンドボタンで「納品書番号(選択)を開く D)納品書に記載したい注文にチェックをつけ終了 E)「納品書番号」フォームの中のレコードが変更され(印刷したいものだけになっている?)、フォームの中のコマンドボタンでレポートを表示させ、印刷する この認識で間違っていないでしょうか? 2. 4.に、 「これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます」 これがうまく行きません。 選択のほうを閉じても、呼び出した側の「納品書番号」の表示が変わらないのです。書いていただいたとおりに作業したのですが。。。 「納品書番号」のほうは、納品書番号が振られた注文、振られていない注文、どちらも全て表示されています(顧客IDに紐づいたもの全て)。「納品書番号(選択)」でチェックをし、保存した後終了させても同じです。 この後、続けて質問しようかと思いましたが、恐らく2.が解決しないと 前に進んでもFuutenさんを混乱させるだけだと思いますので、ここで一旦区切らせていただきたく存じます。 よろしく願いします。

noname#182251
noname#182251
回答No.15

改めて、「新規質問」にしてください。理由は以前に書いたこともあるのですが、それ以外に、「このままでは情報が共用されない」と云うことがあります。レポートに関心がある人で、このスレッドに辿り着く人はいないでしょう。と云うことで、一応これまでの総括的なことを 1.納品書の一覧 以前作成した「納品書番号」のレコードソースを SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 納品書テーブル.顧客ID FROM 納品書テーブル ORDER BY 納品書テーブル.納品書ID DESC; に変更して、新しいものが先に見えるようにします 2.フォームのプロパティで「データ」の「追加の許可」を「いいえ」にします。 3.ウィザードが起動したら「フォームの操作」「フォームを開く」と進み、「納品書番号(選択)」を開くようにします。これでいつでも新規納品書を作成できます 4.「納品書番号」フォームのイベントで「アクティブ時」を「[イベント プロシージャ]」にし編集ボタン(…)を押して、以下のようにします Private Sub Form_Activate() Me.Requery End Sub これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます 5.レポート「納品書」の作成 レコードソースは SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 従業員マスタ.従業員名 FROM 従業員マスタ INNER JOIN 納品書テーブル ON 従業員マスタ.従業員ID = 納品書テーブル.顧客ID WHERE (((納品書テーブル.納品書ID)=[Forms]![納品書番号]![納品書ID])); 6.レポートにフィールドリストから「納品書ID」「従業員名」などを貼り付けます 7.「納品書番号」をデザインモードで開き、ボタンを追加し「納品書」レポートをプレビューで開くようにします。これで任意の納品書が印刷できるようになります 8.実際のレポートは納品書番号に対応するアイテムが並ぶ必要がありますが、これはレコードソース(クエリ)を拡張することでもできるし、親子レポートにすることでも可能です。色々試してください

camo-tech
質問者

補足

お言葉に従い、新規質問を立ち上げました。 http://oshiete1.goo.ne.jp/qa5299784.html 現在、頂いた回答に基づいて作業しておりますが、 >3.ウィザードが起動したら の意味が分かりません。 どういうタイミングで起動するのでしょうか? 基本的なことなのかもしれませんが、どうぞよろしくお願いいたします。

noname#182251
noname#182251
回答No.14

>追加で質問ですが、 これも前に同じようなことを書きましたが、新たな質問として出してください。理由はその時書きました。 と、これだけでもなんなので >今回のようなちょっと特異な(?) 特異とは思いません >納品書を打ち出す際、クエリを新たに準備してレポートで印刷すべきなのか、 レポートをお奨めします。「クエリを新た」と云うか、レポートに埋め込まれたクエリ(レコードソースに書かれたSQL文)をお奨めします。レポートに限らず、フォームでも同じ事ですが

camo-tech
質問者

補足

新たに質問を設けることも考えましたが。。。 すみません、ここで続けさせてください。 理由は、細切れのQAが並んでも、第三者が見て理解できないと思ったからです。(だったら最初から質問を分けるな!と叱られそうですが) レポートに埋め込まれたクエリをお奨め、とのことですが、さっぱり分からないのが現状です。 (格闘したのですが・・・) レポートにのレコードソースを転記して実行すると、エラーになります。 注文テーブルを元に、納品書テーブルや顧客マスター、商品マスターからデータをつなげてクエリを作成し、それを元にレポートを作っても、「選択」のチェックが無視され、1顧客に紐づいた注文情報が全件出力されます。 もう少しお付き合い願えますか?

noname#182251
noname#182251
回答No.13

>しかし、フォームで顧客IDを選択し、「選択」もチェックを入れた上でクエリを実行しても「0件のレコードが更新されます」となり、テーブルのUPDATEが行なわれていない様子です。 当該更新クエリをデーターシートビューで見ると、選択結果を見られます。現状では0件。 で、今ある3条件を一つずつ外してみる。何故0件になるか判るでしょう。 それでも判らない場合は、当該更新クエリのSQL文を補足提示してください。

camo-tech
質問者

補足

なるほど、連動してSQLが更新されていき、条件を削るとヒットするデータが増えていきますね。 勉強になりました。 ありがとうございました。 ちなみに、該当SQLは下記のものです。 ------------------------------------------------------------- UPDATE 注文テーブル SET 注文テーブル.納品書ID = Forms!納品書(選択)!納品書ID WHERE (((注文テーブル.納品書ID)=0) And ((注文テーブル.選択)=True) And ((注文テーブル.顧客ID)=Forms!納品書(選択)!顧客ID)); ------------------------------------------------------------- 追加で質問ですが、今回のようなちょっと特異な(?)納品書を打ち出す際、クエリを新たに準備してレポートで印刷すべきなのか、フォームの体裁を納品書のものにし、直接印刷すべきかで悩んでいます。 お勧めの方法はありますでしょうか?

noname#182251
noname#182251
回答No.12

#11で書き忘れましたが、クエリを試験するときは「納品書番号(選択)」がアクティブになっていないと駄目です。

camo-tech
質問者

補足

ありがとうございます。 先ほど、補足で書きましたクエリで入力を求められる件は、こういうからくりだったのですね。失礼しました。 フォームを起動した上でクエリを実行すると、入力を求められることはなくなりました。 しかし、フォームで顧客IDを選択し、「選択」もチェックを入れた上でクエリを実行しても「0件のレコードが更新されます」となり、テーブルのUPDATEが行なわれていない様子です。

noname#182251
noname#182251
回答No.11

>5.納品書IDと、顧客IDの入力を求められます >6.表示されている納品書IDと顧客IDを入力 この状態では、私がユーザーならば怒ります。5.6.のステップなしで動作しなければ。 上手く行かない原因は更新クエリの不具合です。多分「ID」が全角か半角かと云った問題でしょう。対策ですがSQL文からクエリを作成し、デザインビューで修正を試みるのが楽でしょう。 1.当該クエリを作り、デザインビューで開く 2.「顧客ID」の「抽出条件」を空白にする 3.そのテキストボックスでマウス右ボタンをクリックし、ドロップダウンメニューから「ビルド」を選択 4.左下のツリー構造で、「フォーム」左の「+」をダブルクリック 5.「全てのフォーム」左の「+」をダブルクリック 6.「納品書番号(選択)」を選択 7.中下のボックスから「顧客ID」を選択し、「貼り付け」ボタンをおす 8.「OK」ボタンを押す 9.同様にして「納品書ID」の「レコードの更新」も修正する 10.動作することが確認できたならば、SQL文にしてVBAコードの当該部分を修正する 以上です。ちなみに#9で示したSQL文は、上記3.以降を実行した結果です。

camo-tech
質問者

補足

おっしゃるとおり、クエリの不具合でした。 自己嫌悪に陥っております。 (ちょっとMSに文句が言いたいのは、SQL等を記述した際、存在しないテーブルやフィールドを指定しても、警告やエラーメッセージが出ないことです。今回のように実行して気がつく場合はいいのですが、裏で動き、UIのないものはとても困りますね。。。) さて、修正した結果、メッセージボックスは表示されなくなり、注文テーブル、納品書テーブル共にレコードが正常に更新していることを確認いたしました。 ありがとうございました。 今後、フォームで絞り込んだレコードをレポートに落とし込む作業にうつります。 まず自分でやってみようと思っておりますが、注意点などございましたらご教授いただけると幸いです。 また、クエリの方も勉強します。 (ちなみに、修正したフォームからSQLを抜き出し、クエリに貼り付けて実行してみたのですが、納品書IDと顧客IDの入力を求められます。不思議です) 今後もご指導、よろしくお願いします。

noname#182251
noname#182251
回答No.10

>1.フォームを開くと親子ともに空白のフォームが表示 >2.コマンドボタンを押下しても、各テーブルに変化なし >3.フォーム上で顧客IDを選択すると、紐づいた注文データが表示される ちょっと一言忘れていました(^^; 3.5納品書に取り込みたいアイテムの「選択」チェックボックスを「チェック」する >4.そこでコマンドボタンを押下すると、親子とも空白になる >5.注文、納品テーブルを確認 これでどうでしょう?もし変化がないならば DoCmd.SetWarnings Fals を頭に「'」を付けて 'DoCmd.SetWarnings Fals としてから、もう一度1.~5.を試験してください。 >実行すると、納品書IDと、顧客IDの入力を求められます。 これも一言忘れていました(^^; フォーム「納品書番号(選択)」を実行し、顧客を選んだ状態で試してください

camo-tech
質問者

お礼

お世話になっております。 色々いじったり、確認しながら進んでいるわけですが、上記、5~8の部分を自動化できずにいます。 顧客IDを選択し、どの注文を納品書として表示するのかを選択し(チェックボタン)、納品番号はオートナンバーで振られているのに、なぜメッセージボックスから「顧客ID」と「納品書番号」を入力しなければいけないのでしょうか? 少なくとも親フォームと子フォームはリンケージされていると思っておりますので、解決策がございましたらご教授願いたく存じます。

camo-tech
質問者

補足

お礼とご回答が入れ違いになりましたね(^^ 先ほどお礼で報告した実行時のエラーは、注文情報と、注文テーブルの誤記でした。(凡ミスの嵐・・・) 修正すると、うまく動きました。 状況は、下記のとおりです。 1.起動するとすべて空白 2.顧客を選択すると紐づいた注文情報表示 3.納品したい注文にチェック 4.コマンドボタン押下 5.納品書IDと、顧客IDの入力を求められます 6.表示されている納品書IDと顧客IDを入力 7.空白ページに戻る 8.納品書と注文テーブルの納品書IDが更新、追記されている ここまでの動作でOKでしょうか?

noname#182251
noname#182251
回答No.9

>名称は単なる識別子だと思っていましたが、参照するときに使っていたんですね ここら辺はアクセスのいい加減なところで、バグの温床だと思います。私は嫌いですね。リンクするところで選択肢として出しておいて、「実は違う」は酷いと思います。だからマイクロソフトは嫌いです。 ともかく本題に。若干VBAも使用します 1.サブフォームにチェックボックスを追加し、コントロールソースを「選択」(追加したyes/noフィールド)にする 2.メインフォームにコマンドボタンを貼り付ける 3.コマンドボタンのプロパティでイベントのクリック時右の…をクリックしコードビルダを選択 4.VBエディターが起動されるので下記を貼り付ける Me.注文情報のサブフォーム.Requery DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE 注文テーブル SET 注文テーブル.納品書ID = [Forms]![納品書番号(選択)]![納品書ID] WHERE (((注文テーブル.納品書ID)=0) AND ((注文テーブル.選択)=True) AND ((注文テーブル.顧客ID)=[Forms]![納品書番号(選択)]![顧客ID]));" DoCmd.SetWarnings True Me.Requery 以上で試験してください。上手く行けば納品書番号(選択)フォームとサブフォームから全てのデータがなくなります。さらに「注文テーブル」を開いて、納品書番号が正しく入っていることも確認してください。以下は当該VBAの簡単な解説です Me.注文情報のサブフォーム.Requery 最後にチェックした「選択」をDBに書き込みます。カレントレコードを移動しても同じようなことが起こります。 DoCmd.SetWarnings False これをやらないと、更新クエリ実行時に警告が表示されます DoCmd.RunSQL "UPDATE 注文テーブル SET 注文テーブル.納品書ID = [Forms]![納品書番号(選択)]![納品書ID] WHERE (((注文テーブル.納品書ID)=0) AND ((注文テーブル.選択)=True) AND ((注文テーブル.顧客ID)=[Forms]![納品書番号(選択)]![顧客ID]));" ””の中身(SQL文)を適当なクエリに貼り付けて、意味を確認してください DoCmd.SetWarnings True 警告が表示されるように戻します Me.Requery 新しい納品書作成のスタンバイに移行します

camo-tech
質問者

お礼

おそらく呆れてしまわれていると思います。 凡ミスが発覚しましたので、ご報告しなおします。 まず、凡ミスですが、IDとIDを思い違いしていました。 こちらはすぐ修正いたしました。テーブルでは納品書IDのみ半角「ID」になっていましたので、テーブルのほうを「納品書ID」としました。 (他にもIDを使っているフィールドがあり、統一させるためです) それと、SQLに Me.注文情報のサブフォーム.Requery を入れ忘れていました。すみません。 ここで質問なのですが、この文中の「注文情報のサブフォーム」は「注文情報のサブフォーム(選択)」ではないでしょうか?(結果は下記のとおり同じでしたが・・・) さて、上記を修正し、実行してみましたところ、コンパイルエラーが発生します。 「メソッドまたはデータメンバが見つかりません」とメッセージが出て、 Me.注文情報のサブフォーム.Requery の「注文情報のサブフォーム」部分にフォーカスが当たっています。 SQLは下記のとおりです Private Sub コマンド7_Click() Me.注文情報のサブフォーム.Requery DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE 注文テーブル SET 注文テーブル.納品書ID = [Forms]![納品書番号(選択)]![納品書ID] WHERE (((注文テーブル.納品書ID)=0) AND ((注文テーブル.選択)=True) AND ((注文テーブル.顧客ID)=[Forms]![納品書番号(選択)]![顧客ID]));" DoCmd.SetWarnings True Me.Requery End Sub 「注文情報のサブフォーム」を「注文情報のサブフォーム(選択)」に変更しても同じです。

camo-tech
質問者

補足

早朝からのご回答、ありがとうございます。 早速試してみましたところ、下記のような状態です。 1.フォームを開くと親子ともに空白のフォームが表示 2.コマンドボタンを押下しても、各テーブルに変化なし 3.フォーム上で顧客IDを選択すると、紐づいた注文データが表示される 4.そこでコマンドボタンを押下すると、親子とも空白になる 5.注文、納品テーブルを確認しても、変化なし ちなみに、注文テーブル上の納品書IDは、すべて「0」にしてあります。 また私の凡ミスなのかもしれませんが。。。 コードは下記のとおりです。 こちらの環境に合わせて「ID」を「ID」に変更しました。 Private Sub コマンド7_Click() DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE 注文テーブル SET 注文テーブル.納品書ID = [Forms]![納品書(選択)]![納品書ID] WHERE (((注文テーブル.納品書ID)=0) AND ((注文テーブル.選択)=True) AND ((注文テーブル.顧客ID)=[Forms]![納品書(選択)]![顧客ID]));" DoCmd.SetWarnings True Me.Requery End Sub あと、「””の中身(SQL文)を適当なクエリに貼り付けて、意味を確認してください」とのお言葉にしたがって、クエリにSQLを貼り付け、実行すると、納品書IDと、顧客IDの入力を求められます。

noname#182251
noname#182251
回答No.8

だいぶポイントが絞られてきたので、こちらでも似たような状況が再現できました。これが原因だと良いのですが。 メインフォームのコンボボックス(顧客選択用)の「名前」(コントロールソースではない)は何になっているでしょうか。「従業員ID」のままでは?もしそうであれば「顧客ID」に修正してください。

camo-tech
質問者

お礼

記入する箇所がここにしかございませんでしたので、ここにてご連絡させていただきます。 その後も色々試行錯誤した結果、メッセージボックスで記入を求められる原因が判明しました。 SQLで指定しているテーブル名称が違っていたためでした。 おそらく先のお礼以降、調べていただいているかと存じますが、大変申し訳なく存じます。 どうもすみませんでした。 修正した結果、メッセージボックスは表示されなくなり、注文テーブル、納品書テーブル共にレコードが正常に更新していることを確認いたしました。 今後、フォームで絞り込んだレコードをレポートに落とし込む作業にうつります。 まず自分でやってみようと思っておりますが、注意点などございましたらご教授いただけると幸いです。 (クエリからレポートを作成した経験しかございませんので、前途多難です) 今後もご指導、よろしくお願いします。

camo-tech
質問者

補足

ありがとうございます。 早速調べました。 「コンボ2」になっていました。。。。。。 盲点でした。 名称は単なる識別子だと思っていましたが、参照するときに使っていたんですね。 持っているテキストにも書かれていない新事実でした。 修正したところ、コンボボックスで選択した顧客コードに紐づいた注文テーブルのレコードがサブフォームに表示されました! それにしてもfuuten_no_nekoさん、すごい技術をお持ちですね! 貴殿の回答履歴を拝見いたしましたが、ジャンルも多岐に渡っていて、尊敬します。 お忙しいこととは存じますが、引き続き「選択したものを表示させる」という課題に関しましても、よろしくお願いいたします。

関連するQ&A

  • Access2002で任意のレコードのみをレポートで印刷したい

    http://oshiete1.goo.ne.jp/qa5272888.html の続きです。 テーブルは下記のとおりです。(計4つ) 1.顧客テーブル(データ投入済み) ・顧客ID(テキスト) ・顧客名(テキスト) ・フリガナ(テキスト) 2.納品書テーブル(データはフォームから自動生成) ・納品書ID(オートナンバー) ・納品日付(日付) ・顧客ID(テキスト) 3.注文テーブル(データ投入済み) ・注文ID(テキスト) ・顧客ID(テキスト) ・納品書ID(テキスト) ・数量(数値) ・摘要(テキスト) ・選択(Yes/No) 4.商品マスター(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。 これを元に、レポートとして、 ・顧客を選択 ・納品書番号を選択 して、選択したレコードをレポートに表示したい、という質問です。 前の質問で、下記ご回答を得ております。 --------------------------------------------------------------- 1.納品書の一覧 以前作成した「納品書番号」のレコードソースを SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 納品書テーブル.顧客ID FROM 納品書テーブル ORDER BY 納品書テーブル.納品書ID DESC; に変更して、新しいものが先に見えるようにします 2.フォームのプロパティで「データ」の「追加の許可」を「いいえ」にします。 3.ウィザードが起動したら「フォームの操作」「フォームを開く」と進み、「納品書番号(選択)」を開くようにします。これでいつでも新規納品書を作成できます 4.「納品書番号」フォームのイベントで「アクティブ時」を「[イベント プロシージャ]」にし編集ボタン(…)を押して、以下のようにします Private Sub Form_Activate() Me.Requery End Sub これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます 5.レポート「納品書」の作成 レコードソースは SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 従業員マスタ.従業員名 FROM 従業員マスタ INNER JOIN 納品書テーブル ON 従業員マスタ.従業員ID = 納品書テーブル.顧客ID WHERE (((納品書テーブル.納品書ID)=[Forms]![納品書番号]![納品書ID])); 6.レポートにフィールドリストから「納品書ID」「従業員名」などを貼り付けます 7.「納品書番号」をデザインモードで開き、ボタンを追加し「納品書」レポートをプレビューで開くようにします。これで任意の納品書が印刷できるようになります 8.実際のレポートは納品書番号に対応するアイテムが並ぶ必要がありますが、これはレコードソース(クエリ)を拡張することでもできるし、親子レポートにすることでも可能です。色々試してください --------------------------------------------------------------- fuuten_no_nekoさん、ありがとうございました。 これまでは「フォーム」に関する質問で、今回は「レポート」に関するものに進んできましたので、新規の質問にしたほうがよいとのアドバイスを受け、この質問を立ち上げます。 なお、「今ここまでできている」という部分は、補足に記述します。 どうぞよろしくお願いします。

  • 特定条件での連番の振り方を教えて下さい

    以下のようなテーブルがあります。 納品データ 注文番号 売上番号 連番 商品名 11111    2      1   さしすせそ 11111    2      2   たちつてと  11111    3      1   なにぬねの 11111    4      1   はひふへほ 売上データ(既存データ) 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお 11111    1       2   かきくけこ 注文番号は注文毎に付与される番号 売上番号は発送毎に付与される番号 連番は売上番号毎に付与される連番 毎回 納品データを売上データに取り込みます。 連番に関しては、 納品データと売上データで連番は連動しておらず、 売上データに納品データと同等の注文番号があれば、 注文番号の最大連番数を+1した番号で取り込みます。 更新後、売上データは、 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお(既存データ) 11111    1       2   かきくけこ(既存データ) 11111    2       3   さしすせそ 11111    2       4   たちつてと 11111    4       5   なにぬねの 11111    5       6   はひふへほ としたいのです。 SELECT (SELECT 納品データ.連番+(SELECT NVL(MAX(売上データ.連番),0) FROM 売上データ WHERE 売上データ.注文番号 = 納品データ.注文番号) AS 連番) FROM 納品データ で売上データの連番+1はできたのですが、 売上番号が違う場合は、連番が1になるパターンとなり、 納品データ 注文番号 売上番号 連番 商品名 11111    2       1   さしすせそ 11111    2       2   たちつてと  11111    3       1   なにぬねの ← 11111    4       1   はひふへほ ← 上記SQLですと、 更新後、売上データは、 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお(既存データ) 11111    1       2   かきくけこ(既存データ) 11111    2       3   さしすせそ 11111    2       4   たちつてと 11111    4       3   なにぬねの ← 5にしたい 11111    5       3   はひふへほ ← 6にしたい となり、連番となりません。 どのようにSQLを書けばよいのか、困っています。 どうか、ご教示お願い致します。

  • ACCESS

    どうか皆さんのお力添えを下さい。 ACCESS2010を利用して、以下の様な注文フォームaccdbを完成させていと考えています。現在、以下のところまで作業が進んでいます。 (1)テーブル (1) 注文履歴テーブル 注文ID・・・オートナンバー型 商品No・・・テキスト型 数量・・・数値型 (2) 商品テーブル 商品No・・・テキスト型 商品名・・・テキスト型 単価・・・通貨型 (3) 顧客テーブル 顧客ID・・・数値型 顧客名・・・テキスト型 パスワード・・・テキスト型 (2)フォーム (1)ログインフォーム 顧客ID入力用テキストボックス パスワード入力用テキストボックス ログインボタン・・・VBAを使って顧客テーブルに入っている顧客ID、パスワードが一致すれば注文フォームが開くところまではできました。 (2)注文フォーム(商品画像一覧があり、それをクリックすると商品No毎に個別に作成した注文フォームにジャンプします) ・コントロールボックスで数量を選ぶ ・注文ボタンを押すと注文履歴テーブルに商品ID、商品名、商品数が反映されます。 ここからが質問内容になります。 まず、はじめにログインフォームで入力後、照合OKになった顧客ID、パスワードを その後開いた注文フォームでの注文作業が完了、または中断するまでの間、 注文履歴に自動的に入力させ続けることはできますでしょうか?複数商品の注文が あった際は注文履歴テーブルにおいて複数レコードが連続して同じ顧客IDになるような 方法はあるでしょうか? ネット通販のようなものをイメージしております。 その他にもっと効率の良いやりかたなどあればご教授下さい。 どうぞよろしくお願いします。

  • Access2002でレポート(納品書)に連番を打ち出したい

    色々検索したのですが、なかなかヒットせず、質問させていただくことにしました。 要望は単純です。でも、私に回答を導くことはできませんでした。 一般的な「納品書」をレポートで印刷する際、連番(ユニークであればなんでもかまいませんが)を振って、印刷したいのです。 裏にあるテーブルやクエリには連番フィールドがないので、困っています。と申しますか、フィールドをどこかに作ろうと思っても、リレーションをつなぐ相手がいないのです。 「注文」に紐付けるにも、納品書は複数の「注文」から成り立っているので、相手が複数になりますし、「顧客」に紐付けると、今度はユニークにならず。。。 「連番テーブル」みたいなものを独立させ、クエリを実行するたびに[番号+1]のような処理をさせようかとも考えましたが、独立したテーブルを作ってクエリに紐付けると、Accessから怒られまして。。。 文房具店に売っているような納品書には最初から連番が振ってあるものがありますよね?あのイメージです。 どなたか解決策をお持ちの方がいらっしゃれば、是非ご教授お願いいたします。

  • アクセスでの入力を簡単に行いたいです

    よろしくお願いします。 t商品番号というテーブルがあります。 フィールドは『注文番号』と『商品名』です。 今フォームを新たにつくり、テキストボックス『注文番号』と『商品名』を作りました。 注文番号を入れると商品番号が自動で入るように、テキストボックス商品名のコントロールソースに =DLookUp("商品名","t商品番号","注文番号=" & [注文番号]) と入れましたが、#Errorとでて、注文番号をいれても商品番号が自動で入力されません。 ご意見をよろしくお願いします。

  • ACCESSで連番を振りなおす

    access初心者です。 行番号というテキスト型のフィールドがあり、連番を入力してあるのですが、チェックの過程で一時的に同じ番号を入力する事があります。 それを最終的に、フォーム上のボタンを押して連番に戻したいのですが、どうすればいいかわかりません。 ご回答よろしくお願いします。 [行番号][商品名]   1    あ   2    い   3    う   4    え 上記のデータがチェックの過程で下記になります。 [行番号][商品名]   1    あ   2    い   2    いい   3    う   4    え 上記の状態を、ボタンを押すと下記になるようにしたいのです。 [行番号][商品名]   1    あ   2    い   3    いい   4    う   5    え

  • accessのコンボボックスについて

    質問があります。下記のようなテーブルがあります。 ▼商品情報テーブル  ・商品ID (番号はオート。キー)  ・商品番号(自社で設定している商品ごとの番号)  ・商品名 これを「受注伝票」フォームに使用します。 商品番号をコンボボックスで指定すると 商品名が別のテキストボックスに自動で表示。 もし登録されていない商品の場合には 商品番号と商品名をその場で登録して商品情報テーブルに反映させたい。 コンボボックスで選択する際はID順ではなく、 商品番号の昇順で並び替えたいと思います。 商品番号は数値ではなくテキストになっています。 弊社では「i0001、i0002...」のように、商品番号の頭に「i」が付くからです。 ACCESSのバージョンは2002です。 どうぞよろしくお願いいたします。

  • Access2003で、2種類のキーワードを取得するときに2つ目を動的

    Access2003で、2種類のキーワードを取得するときに2つ目を動的にリストにしたいです。 http://okwave.jp/qa/q5912564.html こちらで解決した問題の続きになるのですが、 下のような構造で印刷できるようにはなりましたが、キーワード取得用フォームに おいて、商品番号を選択した瞬間に、全てのサブテーブルの、その商品番号がもつ 日付Xを日付X入力コンボボックスでリストにできますでしょうか。 (実際にはサブテーブルは5個あります) 可能であるならばその方法を教えてください。よろしくお願いいたします。 【テーブル構造】 基本テーブルは、 商品番号、商品名 内容  サブ1テーブルは、 商品番号、日付A 日付X サブ2テーブルは、 商品番号、日付B 日付X ------------------------------ 【キーワード取得用フォーム】 [1]商品番号入力コンボボックス→商品番号「001」が選択されたとします [2]日付X入力テキストボックス→日付「2010年6月5日」が選択されたとします [送信ボタン] ------------------------------ 【全体書類印刷用レポート】 ---基本情報--- (商品番号001の基本情報) 001:シャープペンシル 斬新なデザインで芯が減らないシャーペン ---サブ情報--- (商品番号001で日付Xが2010年6月5日のサブ1テーブルの日付A例) 2010年2月10日 2010年3月3日 (商品番号001で日付Xが2010年6月5日のサブ2テーブルの日付B例) 2010年2月20日 2010年4月5日 ------------------------------

  • アクセス2003で納品金額の合計を出すには?

    いつもお世話になります。 アクセス2003で納品チェックがOnになっているレコードのみ金額の合計を出したいのですが、うまくいきません。 フォーム「未納」はレコードソースが選択クエリ「未納」からなる帳票フォームです。 納品チェックをOnにしたら、今日の日付が納品日に入るようにし、Offの場合は空欄にしてあります。 納品完了のコマンドボタンのフォーカス取得後にマクロで、条件に[納品チェック]=On、アクションに値代入、アイテムに[Forms!]![未納]![テキスト48]、式にDSum("価格*個数","未納","納品チェック=On")としているのですが、訂正をお願いします。テキスト48は「未納」フォーム上にある非連結のテキストです。またこの方法以外でもいろいろためしてみますのでどなたか教えてください。よろしくお願いいたします。

  • accessで年度の表示をさせたい

    いつもお世話になります。過去ログ参照し、いろいろやってみましたが、どうしても解決できないのでよろしくお願いします。 商品の売上の管理をするDBをつくろうとしています。 テーブルに会社マスタとして、会社名と会社IDが、商品マスタには商品名と商品IDが、伝票には伝票番号、会社番号、商品番号、日付、年度のフィールドが作ってあります。 伝票を入力するためのフォームとクエリも作成しています。 伝票を入力するフォームに年度というテキストボックスを作成し、コントロールソースに=IIf(Month([txt])<4,Format(DateAdd("yyyy",-1,[日付のテキストボックス名]),"gggee" & "年度"),Format([日付のテキストボックス名],"gggee" & "年度")) を入力し、日付が決定されると年度を表示されるようにしたかったわけです。 本来、日付のフィールドはデータ型に、「日付/時刻型」を選んでおり、日付カレンダーの表示により、目的の日にちを選択することでyyyy/mm/ddの表示をさせているものです。定型入力の欄は空白になっています。 ところが、フォームをデザインビューで開くと年度の欄に「#Name?」 の表示が出てしまいます。基本的なことなのでしょうが、わかりやすく説明していただけないでしょうか? あと、~月度のような考え方はどのようにしたらよいでしょう?