Access2007での商品修理受付状態管理について

このQ&Aのポイント
  • Access2007を使用して、商品の修理受付状態を管理するデーターベースを作成している初心者です。商品ごとに異なる管理番号を取得し、重複登録のない設定もしたいです。
  • 現在、作成したテーブルとフォームは機能していません。修理受付入力と修理受付明細、作業完了入力、作業完了明細のフォームを作成予定です。
  • 修理受付明細フォームでの明細行番号の表示方法、現在の状態と修理回数の自動表示方法がわかりません。ご教授いただければ幸いです。
回答を見る
  • ベストアンサー

Countと受付状態の表示について

現在、Access2007にて、会社の顧客管理システムを作成している超初心者です。 本を数冊買い込んで、作成しているのですが、どうしてもわからず、質問をさせていただきました。どなたかご教授いただければと願っております。 基本的には、自社で取得するオリジナルの管理番号にて、商品の修理受付状態を管理するデーターベースです。 なお、管理番号は、商品別に取得しているので、商品が異なれば、同じ管理番号が存在します。 例えば、   商品   管理番号   AAA    001   AAA    002   BBB    001   BBB    002 商品AAAの管理番号001というものは、1つしか存在しません。また、重複登録をしないような設定もしたいと思っていますが、そのやり方もよくわかっておりません。 現在、作成したテーブルならびにフォームは、 入力者テーブル   フィールドは、入力者ID(主キー)、入力者名、ふりがな 顧客テーブル    フィールドは、顧客ID(主キー)、顧客名、ふりがな、備考 商品テーブル    フィールドは、商品ID(主キー)、商品名、顧客参照ID、備考 管理番号テーブル  フィールドは、管理番号ID(主キー)、顧客名参照ID、商品参照ID、管理番号、備考 です。 このあとに、修理受付入力と修理受付明細、作業完了入力、作業完了明細、修理履歴の検索テーブル及び、フォームを作成する予定です。 (実際には、少し作成しているのですが、まったく機能していません。。) 1つの管理番号に対して、最終的に数回の修理を受付します。 現在、私が考えている、修理受付入力と修理受付明細、作業完了入力、作業完了明細フォームに関しては、以下の内容を必要とします。 ■修理受付入力フォーム  ・修理受付ID(主キー)  ・入力日(自動入力)  ・入力者(コンボボックス)  ・顧客名(コンボボックス)  ・商品名(コンボボックス) 修理受付入力フォームのサブフォームとして、 ■修理受付明細テーブル  ・修理受付明細ID(主キー)  ・修理受付親ID  ・明細行番号(入力した行について、行数を表示したい)  ・管理番号(手入力)  ・現在の状態(管理番号を入力したら自動的に状態が表示されるようにしたい。)  ・修理回数(管理番号を入力したら自動的に過去の修理回数が表示されるようにしたい。)  ・受付日(手入力)  ・備考 *「現在の状態」については、受付をする際は、前回の修理分が「納品済」となっているので「納品済」、または、初めての受付の場合は、「新規」と表示したいです。また、修理受付が終わり、受付ボタンにて、作業完了フォームにコピーされた後は、作業完了明細にて、「受付中」と表示され、作業完了登録をすると、また「納品済」と表示したい。 *修理回数は、作業完了明細の完了日を入力した数をCountして、それに作業完了明細にて、修理不能返却をしたものは、完了日のCountマイナス1の数字を表示したい。 *商品AAAに対して、管理番号が異なるものをまとめて20個受付したりすることがあるため、サブフォームにて、異なる管理番号のものを、まとめて入力できるようにしたく、サブフォームを作りました。 ■作業完了入力フォーム(修理受付をすると、内容が作業完了にコピーされるようにするつもりです。)  ・作業完了受付ID(主キー)  ・入力日  ・入力者  ・顧客名  ・商品名 作業完了入力フォームのサブフォームとして、 ■作業完了明細テーブル (基本的には、作業完了入力フォームと同様、コピーされ、商品受付明細のフォームに、追加したフィールドがあります。)  ・作業完了受付明細ID(主キー)  ・作業完了受付親ID  ・明細行番号  ・管理番号  ・現在の状態  ・修理回数  ・受付日  ・完了日(手入力)  ・修理不能返却(Yes/No型)←修理不能の場合はチェックを入れる。  ・備考 今、つまずいている部分は数か所あります。  ・商品AAAの管理番号001という商品は、1つしか存在しません。管理番号テーブルにて、重複登録をしない設定をしたい。  ・明細行番号の表示の仕方  ・修理受付明細フォームでの、現在の状態、修理回数の自動表示の方法。(クエリの作り方から、フォームへの反映の仕方が全くわかりません。) どなたか、ご教授くださいませ。どうぞよろしくお願いいたします。

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

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

#1~#4です サンプルDBを試作してみましたが、結構面倒で、それ以上に説明は大変そうです。と云うことで取り敢えず簡単なことから。 >1つのフォームに、1つのテーブルが必要と思っておりました。 一般的にはフォームにテーブルをそのまま対応させることはありません。クエリーを介在させます。例えば一覧表示するとき、アイウエオ順や年月日順に表示しようとすればクエリー介在が必要です。またテーブルはレコードの並び順を保証しませんから、いつ利用しにくい並びになるか判らないからです >受付フォームにて、受付をし、作業が完了した際には、再度、受付フォームを開いて、完了日を入力すれば良いのですよね?! これでも良いですが、クエリーを使用すれば、完了日未記入のものだけを一覧表示して処理するようなこともできます。どちらかというとその方が良いでしょう >顧客名さえあれば電話番号や住所等はこのシステムでは必要ないので、顧客ID(オートナンバー)顧客名、ふりがな、備考のみで良いことになります。 他のDBに顧客名関連の情報がある場合は、それとリンクして使用します。ですから当該DBでは顧客参照IDだけで済ませます。リレーショナルDBでは同じデータの複数登録はできる限り避けるべきです。入力手間が増える弊害もさることながら、入力回数が増えれば、誤りの発生もほぼそれに正比例するためです >コンボボックスで選択 コンボボックスの選択も便利ですが、選択対象がせいぜい10くらいまで、無理しても20以下にしたいです。それ以上では選択が大変です。その場合は一覧表示し、そこから選択して処理の流れになります。さらにレコード数が多いときはグループ分け、さらには「大分類」「中分類」「小分類」のような仕掛けも必要になります。 以上もふまえサンプルDBの仕様ですが 1.商品一覧表示フォームから当該商品を選択し、この商品の管理番号一覧フォームを開く 2.管理番号一覧フォームで目的とする管理番号を選択し、修理履歴フォームを開く 3.管理番号一覧フォームは新しい管理番号を追加でき、これはそれまでの最大プラス1になる 4.修理履歴テーブルは管理番号ごとに連番をもつ 5.修理履歴フォームから個々の修理明細フォームを開ける 6.修理明細フォームは上記の流れ以外、現在対象絞り込み(完了日未記入だけを絞り込む)からも開けるようにする ざっとこんな感じでしょうか?よろしいか、あるいは仕様変更を補足してください。

helpaccess
質問者

補足

貴重なお時間をたくさん、たくさんさいていただき、また、いろいろとお考えいただき、ほんとうにほんとうに心より感謝申し上げます。 早速ですが、 >>受付フォームにて、受付をし、作業が完了した際には、再度、受付フォームを開いて、完了日を入力すれば良いのですよね?! >これでも良いですが、クエリーを使用すれば、完了日未記入のものだけを一覧表示して処理するようなこともできます。どちらかというとその方が良いでしょう につきましては、fuuten_no_nekoさまがおっしゃられるように、完了日未記入のものだけを一覧表示して処理する方法が私にもできるようであれば、是非そうしたいです!! 次に、顧客名についてですが、私の書き方が悪かったのですが、他のDBに存在するというのは、Accessではなく、全く異なったソフトにて売り上げ管理は行っておりますので、とりあえず、今回、顧客ID(オートナンバー)顧客名、ふりがな、備考のテーブルは必要になるかと思います。合ってますでしょうか? >>コンボボックスで選択 につきましては、ご指摘のように、商品の種類はコンボボックスで表示できる限界の10~20以上を裕に越し、現時点で数百ありますので、ご提案のグループ分け、さらには「大分類」「中分類」「小分類」の方法を取りたいと思います。 DBの仕様についてですが、 私にできるようであれば、ご提案の1~6の内容は最高!!です。 ただ、 >3.管理番号一覧フォームは新しい管理番号を追加でき、これはそれまでの最大プラス1になる の「最大プラス1になる」についてですが、 現在、すでに管理番号を取得している商品があり、それは、初めて受付をした日プラス2桁の連番を取っております。 例えば、商品Aを2009年3月11日に3点新規受付したとすると、管理番号は 商品A 09031101 商品A 09031102 商品A 09031103 となり、同じ、2009年3月11日に商品Bを3本新規受付すれば、 商品B 09031101 商品B 09031102 商品B 09031103 となっております。また、現場の人間に確認をしたところ、管理番号の取得形式は上記のとおりしたいとのことですので、なんとか、このような取得方法はできますでしょうか。 ほんとうに厚かましく申し訳ないのですが、どうかよろしくお願い申し上げます。

その他の回答 (36)

noname#182251
noname#182251
回答No.37

#36を回答してから約一ヶ月ですが、「新しい質問」をされたようにも見えません。 1.私が見落としている 2.問題は自力解決した 3.その他 どれでしょう?

helpaccess
質問者

お礼

fuuten_no_nekoさんのおかげで、その後、なんとか自力で進め、実用段階にこぎつけました!! ほんとうに手取り足取りありがとうございました。 また、ご心配をおかけいたしまして、申し訳ございませんでした <m(__)m>

noname#182251
noname#182251
回答No.36

今までの状況を総括してみたいです。 1.#5で示したロードマップは一応1~5が終わった 2.それそれ実用段階にするためには作り込みが必要 3.宿題としては、大分類の選択方法(一つずつレコードを移動するのではない方法)や管理台帳フォームでの顧客名選択方法の改善(20以上の対象をコンボボックスから選択するのはやりにくい)などある。またロードマップでの6.も未解決。さらに初期メニュー画面的なものも必要でしょう。 こんな状況と思いますが、それぞれの問題は、新たな質問として投稿した方が良いと考えます。理由は#34にも書いたとおりです。 このスレッドをすぐに閉め切る必要はありませんが。

helpaccess
質問者

お礼

手取り足取り、こんなに沢山、かつ大変ご丁寧にご指導いただき、ほんとうにありがとうございました<(_ _)><(_ _)> 実用までには、確かに修正等が必要ですが、ひとつずつ解決していこうと思います。また、わからないことが出てきたら、みなさまのお知恵を拝借させていただきたいと思います。 ほんとうに、ほんとうにありがとうございました。<(_ _)>

noname#182251
noname#182251
回答No.35

続きです。修理明細フォームの作成 1.修理明細フォームのSQL文 SELECT 顧客テーブル.顧客名, 商品テーブル.商品名, 商品テーブル.備考, 管理テーブル.管理番号, 修理伝票テーブル.修理伝票ID, 修理伝票テーブル.連番, 修理伝票テーブル.受付日, 修理伝票テーブル.完了日, 修理伝票テーブル.引き渡し日 FROM 修理伝票テーブル INNER JOIN (顧客テーブル INNER JOIN (商品テーブル INNER JOIN 管理テーブル ON 商品テーブル.商品ID = 管理テーブル.商品ID) ON 顧客テーブル.顧客ID = 管理テーブル.顧客ID) ON 修理伝票テーブル.管理番号ID = 管理テーブル.管理ID; 実際には「引き受け者」や「修理担当者」などのデータも必要でしょうが、これは修理伝票テーブル上では「社員ID」で管理すべきものです。なので修理伝票テーブルに「引き受け者IDフィールド」や「修理担当者IDフィールド」追加し、一方で社員テーブルとの連携も取れるようにしなければなりません。とても解説しきれないので実装はスキップします 2.修理明細フォームのレイアウト フィールドリストから必要項目をフォーム上に配置します。まとめてリストからフォームに配置することもできます 3.修理履歴フォームのSQL文を若干変更 SELECT 修理伝票テーブル.修理伝票ID, 修理伝票テーブル.管理番号ID, 修理伝票テーブル.受付日, 修理伝票テーブル.開始日, 修理伝票テーブル.完了日, 修理伝票テーブル.引き渡し日, 管理テーブル.管理番号, 修理伝票テーブル.連番, 顧客テーブル.顧客名, 商品テーブル.商品名 FROM ((修理伝票テーブル INNER JOIN 管理テーブル ON 修理伝票テーブル.管理番号ID = 管理テーブル.管理ID) INNER JOIN 顧客テーブル ON 管理テーブル.顧客ID = 顧客テーブル.顧客ID) INNER JOIN 商品テーブル ON 管理テーブル.商品ID = 商品テーブル.商品ID ORDER BY 管理テーブル.管理番号, 修理伝票テーブル.連番; 要するに修理伝票テーブルの修理伝票IDを追加しています 4.修理履歴フォームに「修理明細を開く」ボタンを追加。コードは Dim stDocName As String Dim stLinkCriteria As String Me.Recordset.Edit Me.Recordset.Update stDocName = "修理明細フォーム" stLinkCriteria = "[修理伝票ID]=" & Me![修理伝票ID] DoCmd.OpenForm stDocName, , , stLinkCriteria 5.修理明細フォームでは書式で 規定のビュー:単票フォーム レコードセレクタ:いいえ 移動ボタン:いいえ 区切り線:いいえ くらいがよいでしょうか

helpaccess
質問者

補足

ご連絡、遅くなりました!! 今回の工程、完了しました!!! 毎度、毎度、大変恐れ入りますが、続きのご指導をお願い申し上げます<(_ _)>

noname#182251
noname#182251
回答No.34

>一目でわかるように表示される仕様にできれば、大変ありがたいです これは新しい質問として投稿してください。理由はこのスレッドが既に長くなりすぎていること、そしてもっと大きな問題は、回答を見る人がほとんどいないことです。つまり知識が共有されない。新質問になれば、新たに回答者も現れるし、同じような問題を抱える人(将来にわたり)に対しては有効な対策となります。 それでは「修理履歴フォーム」の作成 0.「修理伝票」テーブルの作成。フィールドは 修理伝票ID:オートナンバー 受付日:日付/時刻型 開始日:日付/時刻型 完了日:日付/時刻型 引き渡し日:日付/時刻型 その他諸々 管理番号ID:数値型 連番:数値型 以上で「管理番号ID」と「連番」にまたがり主キー 1.修理履歴フォームのSQL文 SELECT 修理伝票テーブル.管理番号ID, 修理伝票テーブル.受付日, 修理伝票テーブル.開始日, 修理伝票テーブル.完了日, 修理伝票テーブル.引き渡し日, 管理テーブル.管理番号, 修理伝票テーブル.連番, 顧客テーブル.顧客名, 商品テーブル.商品名 FROM ((修理伝票テーブル INNER JOIN 管理テーブル ON 修理伝票テーブル.管理番号ID = 管理テーブル.管理ID) INNER JOIN 顧客テーブル ON 管理テーブル.顧客ID = 顧客テーブル.顧客ID) INNER JOIN 商品テーブル ON 管理テーブル.商品ID = 商品テーブル.商品ID ORDER BY 管理テーブル.管理番号, 修理伝票テーブル.連番; 2.「修理履歴フォーム」のフォームヘッダに ・管理番号、顧客名、商品名、管理番号 詳細に ・連番、受付日、完了日 などを配置し、フォームの規定のビューを帳票フォームにする 3.管理台帳フォームに「修理履歴ボタン」を貼り付け、コードビルダで Dim stDocName As String Dim stLinkCriteria As String Me.Recordset.MovePrevious 'おまじないのような二行 Me.Recordset.MoveNext stDocName = "修理履歴フォーム" stLinkCriteria = "[管理番号ID]=" & Me![管理ID] DoCmd.OpenForm stDocName, , , stLinkCriteria が実行できるようにする。Meその他に関する問題は解決済み(過去参照)と考える 4.修理履歴フォームの開く時イベントに以下のコード Dim dbs As Database Dim stDocName As String Dim rst As DAO.Recordset Set rst = Me.Recordset If rst.RecordCount = 0 Then Set dbs = CurrentDb Set rst = dbs.OpenRecordset("修理伝票テーブル") rst.AddNew rst.Fields("連番").Value = 1 rst.Fields("管理番号ID").Value = Form_管理台帳フォーム.管理ID rst.Fields("受付日").Value = Date rst.Update Me.Requery End If 5.修理履歴フォームに「修理伝票追加ボタン」を作成。必要なコードはこれまでを参考に考えてください。

helpaccess
質問者

補足

>>一目でわかるように表示される仕様にできれば、大変ありがたいです 上記については了解いたしました!!どっぷり、自分のことばかり考えていました。お恥ずかしい。。。 そして、1~5まで完了しました!! fuuten_no_nekoさん様様です<(_ _)><(_ _)> 毎度恐れ入りますが、続きをご教授くださいませ。

noname#182251
noname#182251
回答No.33

#32の補足からすると 1.管理番号がない商品に対しては、顧客が空白の管理番号が発行される 2.この状態で顧客を選択できる 3.管理番号の追加もできる で、何ら問題ない動きだと思うのですが。何か不足があるのでしょうか? 現在#5で示したロードマップの3.までが終わろうとしていると思います。以後ですが確認しておきたいのは 4.一つの管理番号に対し、複数の連番修理レコードが必要なのか? 5.現在の状態は同じ顧客が、同じ商品を複数の管理番号で管理されていますが、これはどのような意味を持つのでしょうか?

helpaccess
質問者

補足

>#32の補足からすると >1.管理番号がない商品に対しては、顧客が空白の管理番号が発行される >2.この状態で顧客を選択できる >3.管理番号の追加もできる >で、何ら問題ない動きだと思うのですが。何か不足があるのでしょうか? すみません。再度、確認をしたところ、管理番号フォームを閉じた状態にして、「商品中分類選択フォーム」のサブフォームの「商品一覧フォーム」の管理番号がない商品のボタンを押すと、正しく、管理番号が新たに発行され、顧客も選択でき、管理番号も追加できるのですが、「管理番号フォーム」を開いたままの状態で、「商品中分類選択フォーム」に戻り、サブフォームの「商品一覧フォーム」の別の管理番号がない商品のボタンを押すと、すべての欄が空白の「管理番号フォーム」が開き、「管理番号追加」のボタンをクリックすると、下記のエラーが出ます。 ************************ 実行時エラー 94 Nullの使い方が不正です。 ************************ なお、今回の検証で、別の管理番号がない商品を選択する場合は、一度、「管理番号フォーム」を閉じてから、あらためて「商品中分類選択フォーム」に戻り、サブフォームの「商品一覧フォーム」の別の管理番号がない商品のボタンを押せば、正しく管理番号を追加できることが判ったので、問題はありません。 このことに気付かず、いろいろと検証していただき、本当に申し訳ございませんでした<(_ _)><(_ _)> >4.一つの管理番号に対し、複数の連番修理レコードが必要なのか? 1つの管理番号に対し、複数の連番修理レコードが必要です。 >5.現在の状態は同じ顧客が、同じ商品を複数の管理番号で管理されていますが、これはどのような意味を持つのでしょうか? 実は、弊社で扱っている商品というのは、刃物(ドリルなど)でして、切れが悪くなると、お客様より刃物をお預かりし、研磨をし、また切れる状態にして納品します。 たとえば、商品AAAの管理番号09040301の刃物につき、切れが悪くなるたびにお預かりし、研磨を行います。 そのため、商品AAAの管理番号09040301の刃物を何度もお預かり→研磨→納品するという流れになり、最終的に摩耗がひどい状態になると、研磨不能となり、廃棄または研磨をしない状態でお客様に返却をするという流れになります。 また、その刃物1本1本につき、お客様の使用頻度や摩耗状況が異なるため、同じ商品でも、研磨できる回数も異なり、高品質保持のためには、弊社で、研磨履歴と研磨回数を把握し、研磨の限界を確かな履歴と目視で判断する必要があります。そのため、1つの管理番号に対し、複数の修理レコードが必要となり、また、同じ顧客の同じ商品であっても、管理番号ごとに、1点1点管理する必要があります。 作業としては、大変面倒なことですが、弊社にとっては、とても重要なことなのです(^_^;) いつも説明不足でわかりにくいかと存じますが、ご理解いただけたでしょうか。。 また、#5の >5.修理履歴フォームから個々の修理明細フォームを開ける >6.修理明細フォームは上記の流れ以外、現在対象絞り込み(完了日未記入だけを絞り込む)からも開けるようにする についてですが、修理履歴フォームを開いたときに、個々の修理明細フォームを開かなくても、管理番号ごとに、過去の修理(研磨)回数、現在の状態(受付済・納品済・廃棄返却)が一目でわかるように表示される仕様にできれば、大変ありがたいです。 もちろん、修理履歴フォームから修理明細フォームは開ける仕様にしたいです。 また、修理明細フォームの絞込み(検索?!)については、完了日未記入だけを絞り込むなども含めて、複数の項目(顧客別、商品別、管理番号別、現在の状態別)でも絞込みができれば、とてもありがたいです。 ほんとうにほんとうに、お世話になりっぱなしのうえ、ど厚かましいお願いですが、どうか、ご協力のうえ、ご教授くださいますようお願い申し上げます<(_ _)><(_ _)><(_ _)>

noname#182251
noname#182251
回答No.32

#31の補足では状況が良く判りませんが「管理番号がひとつもない商品」でそうなるのでしょうか?

helpaccess
質問者

補足

またまた、説明不足ですみません。 再度確認したところ、「管理番号がひとつもないない商品」については、 Set rst = Me.Recordset にブレークポイントを設定し、「管理番号フォーム」は閉じた状態から、「商品中分類選択フォーム」のサブフォームの「商品一覧フォーム」の管理番号がない商品のボタンを押すと、「商品中分類選択フォーム」が開いたまま、「管理番号フォーム」は開かず、この行が黄色く反転し、F8で進むと最終行の End Sub まですべての行が黄色く反転しました。 そのまま続けてF8を1回押すと、下記のVBAの最終行 End Function が黄色く反転し、「管理番号フォーム」が開き、新しい管理番号が1つ作成されます。その際、顧客名は空白になってます。 **************************************************************** Public Function 管理番号フォームOpen() Dim stDocName As String Dim stLinkCriteria As String stDocName = "管理番号フォーム" PID = Form_商品一覧フォーム![商品ID] stLinkCriteria = "[商品ID]=" & Form_商品一覧フォーム![商品ID] DoCmd.OpenForm stDocName, , , stLinkCriteria End Function **************************************************************** なお、「管理番号が存在する商品」は、#31の補足のように、 Set rst = Me.Recordset にブレークポイントを設定し、「管理番号フォーム」は閉じた状態から、「商品中分類選択フォーム」のサブフォームの「商品一覧フォーム」の管理番号が存在する商品のボタンを押すと、「商品中分類選択フォーム」が開いたまま、「管理番号フォーム」は開かず、この行が黄色く反転し、F8で進むと、次は、 If rst.RecordCount = 0 Then の行が黄色く反転し、さらにF8を1回押すと、最終行から2行目の End If の行が黄色く反転しました。 そして、続けて2回F8を押すと、最終行の End Sub そして、「管理番号がひとつもないない商品」と同様、上記VBAの End Function が黄色く反転し、「管理番号フォーム」が開きました。ただ、この時、新しい管理番号は作成されていません。 検証になっておりますでしょうか?? いつも、的外れですみません。。

noname#182251
noname#182251
回答No.31

>商品ID = Me!商品ID >顧客ID = Me!顧客ID >も試しましたが、やはり、同じエラー(実行時エラー 94 Nullの使い方が不正です。 実行時エラーが「管理番号がひとつもない商品」であればコードは正しいです。問題は#26の「4.「管理台帳フォーム」の「開くときイベント」のプロシージャを下記のようにする」が正しく実行されているかです。 ブレークポイントを Set rst = Me.Recordset 辺りに設定し、 1.ブレークポイントで停止するか 2.停止するならば以後をF8キーで1行ずつ進行 3.「管理番号がひとつもない商品」で「If rst.RecordCount = 0 Then」に続く行が実行されるか を確認してください。

helpaccess
質問者

補足

早速、 Set rst = Me.Recordset にブレークポイントを設定して動きを確認してみました。 Set rst = Me.Recordset にて、黄色く反転し、F8で進むと、次は、 If rst.RecordCount = 0 Then の行が黄色く反転し、さらにF8を押すと、最終行から2行目の End If の行が黄色く反転しました。

noname#182251
noname#182251
回答No.30

>の最後の行が >PID = Form_管理台帳フォーム.商品ID >だったということでしょうか? 違います。#27では、「商品一覧フォーム」の「管理台帳一覧へ」ボタンを押したときのエラー対策でした。それが「管理番号フォーム」「管理番号追加ボタン」に替わっていたことを見落としていたため混乱して「#27で、間違ったことを書きました(^^;」と書いてしまった次第です。なので#27はそれなりに正しいです。 「管理番号フォーム」「管理番号追加ボタン」でのエラーには 顧客ID = Form_管理台帳フォーム.顧客ID ついでにこれも試してください 顧客ID = Me!顧客ID それから、このままの状態では ************************ 実行時エラー 94 Nullの使い方が不正です。 ************************ が出るのが正常な反応です。#26の4.以下が修正されて、初めて正常に動くようになります。

helpaccess
質問者

補足

またまた説明不足で混乱させてしまい、申し訳ございませんでした。 早速、「管理番号フォーム」「管理番号追加ボタン」でのエラーに 商品ID = Form_管理番号フォーム.商品ID 顧客ID = Form_管理番号フォーム.顧客ID ならびに、 商品ID = Me!商品ID 顧客ID = Me!顧客ID も試しましたが、やはり、同じエラー(実行時エラー 94 Nullの使い方が不正です。)で、 商品ID = Form_管理番号フォーム.商品ID の部分が黄色く反転しています。 (#26の4.5の修正はできています。) #27の補足では、 商品ID = Form_管理番号フォーム.商品ID の部分を 商品ID = Form_商品一覧フォーム.商品ID にして動かし、次の行の 顧客ID = Form_管理番号フォーム.顧客ID が黄色く反転していましたが、今回、 商品ID = Form_管理番号フォーム.商品ID に変更すると、商品IDの行が黄色く反転します。 (商品ID = Me!商品ID  顧客ID = Me!顧客ID  で試した場合でも同様です。) また、ひとつ気になったのですが、管理番号がひとつもない商品について、商品一覧フォームから管理番号フォームへ商品を選択し、移動した際、管理番号フォームにて、商品IDと商品名の欄が空白になっているのは正しいでしょうか。 (商品ID・商品名は空白、管理番号IDは(新規)と記載されており、管理番号と顧客名欄も空白になっております。)

noname#182251
noname#182251
回答No.29

確認したいのですが、下記は管理番号がない商品に対し、「管理番号追加」ボタンを押した際にでるのでしょうか。違うのであれば、このエラーが出現するまでの手順を示してください。 ************************ 実行時エラー 94 Nullの使い方が不正です。 ************************ とエラーメッセージが出て、デバックをクリックすると、下記の「管理番号フォーム」「管理番号追加ボタン」「クリック時イベントプロシージャ」の「商品ID = Me.商品ID」が黄色く反転しました。

helpaccess
質問者

補足

>確認したいのですが、下記は管理番号がない商品に対し、「管理番号>追加」ボタンを押した際にでるのでしょうか。違うのであれば、このエ>ラーが出現するまでの手順を示してください。 >************************ >実行時エラー 94 >Nullの使い方が不正です。 >************************ そうです。管理番号がない商品に対し、「管理番号追加」ボタンを押した際に上記のエラーがでます。管理番号がある商品については、正しく管理番号が追加されます。 また、#28で教えていただいた >#27で、間違ったことを書きました(^^; >誤)商品ID = Form_商品一覧フォーム.商品ID >正)商品ID = Form_管理台帳フォーム.商品ID >なので >顧客ID = Form_管理台帳フォーム.顧客ID >ついでにこれも試してください >顧客ID = Me!顧客ID についてですが、 #27の >・いささか闇雲な対策 >問題の行は私の場合だと、以下の三通でどれでも問題なく実行できま>す。そちらでは如何でしょう? >PID = Me.[商品ID] >PID = Form_商品一覧フォーム![商品ID] >PID = Form_商品一覧フォーム.商品ID の最後の行が PID = Form_管理台帳フォーム.商品ID だったということでしょうか? 何度もお手数をお掛けして、申し訳ございませんが、再度教えてくださいませ。

noname#182251
noname#182251
回答No.28

>商品ID = Form_商品一覧フォーム.商品ID >に置き換えると、この行は動いたのですが、次はすぐ下の >顧客ID = Me.顧客ID >にて、同じエラーメッセージが出ました。 >この行をいろいろ変えてみたのですが、どうしてもうまくいか>ず、つまずいています。 #27で、間違ったことを書きました(^^; 誤)商品ID = Form_商品一覧フォーム.商品ID 正)商品ID = Form_管理台帳フォーム.商品ID なので 顧客ID = Form_管理台帳フォーム.顧客ID ついでにこれも試してください 顧客ID = Me!顧客ID

関連するQ&A

  • access フォーム間で情報が引き継がれない

    初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 請求管理のシステムを作っています。 テーブルには 顧客マスタ(主キーは顧客番号でテキスト型 例:0001等) 請求マスタ(主キーは請求番号でテキスト型 例:A0001等) 明細マスタ(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客マスタ(1)→(多)請求マスタ(1)→(多)明細マスタになっています。 顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に 飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を 引っ張っていくようにしたいのですが、うまくいきません。 ちなみに顧客マスタと請求マスタのリレーションは”顧客番号”でつなげています。 請求書作成フォームは請求書作成クエリから成り、 その中で顧客番号(テーブル:顧客マスタ)の抽出条件に[Forms]![顧客入力フォーム]![顧客番号]と 入れて”顧客番号つながり”で飛ぶようにしているのですが、 請求書作成フォームは開くのですけど、項目はすべて空白です。 またいろいろレコードを追加している内に、請求番号が既にあるものに対しては顧客情報も引き継がれることが判明しました。 構文が間違っているのでしょうか? 混乱しています、お助けください。

  • access 請求番号の自動採番

    まったくわかりません! よろしくお願いします。 仕様環境 WinXP  access2002 顧客管理のシステムを作っています。 テーブル 顧客テーブル(主キーは顧客番号 テキスト型) 請求テーブル(主キーは請求番号 テキスト型) 明細テーブル(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客テーブル(1)→(多)請求テーブル(1)→(多)明細テーブルになっています。 顧客情報を入力するフォームを作りました。 主キーは顧客番号(テキスト型,入力モードON,インデックス いいえ)で 他のテキストボックス(例えば名前)に何かしら文字を入力すると自動で顧客番号を採番してくれます。 例:0001 0002 0003~ そしてそのフォームから請求書作成フォームに飛ぶように 「請求書作成ボタン」を作り、顧客情報も一緒にひっぱっていってくれる 請求書作成フォームを作りました。(入力したばかりの情報も最新の情報で更新してくれます。) ・・請求書作成フォームはサブフォームを使い3つのテーブルからなっています。・・ 親フォーム:顧客テーブルから。 子フォーム:請求テーブルから。 孫フォーム:明細テーブルから。 主キーは請求番号で(テキスト型,入力モードON,インデックス はい(重複なし)) 他のテキストボックス(例えば請求日)に何かしら入力すると自動で請求番号を採番してくれます。 例:A0001 そこで問題なのですが、顧客情報は入力する度、次々自動で採番してくれるんですが、 請求番号は一番最初のレコードの”A0001”だけ採番してくれて、 新しいレコードで請求書を作ろうとテキストボックスに文字を入力すると「型が一致しません」というエラーが出ます。 ○ エラー内容 アクションエラーの実行 条件 true アクション名 値の代入 引数 [請求番号],Format(DMax("請求番号","請求マスタ")+1,"A0001") マクロは・・(参考書を参考にしています、マクロ名:自動採番マクロ) ------------------------------------------------- 条件 : DCount("請求番号","請求テーブル")=0 アクション : 値の代入 アイテム  : [請求番号] 式     :"A0001" ------------------------------------------------- 条件    : ... アクション : マクロの中止 ------------------------------------------------- アクション : 値の代入 アイテム  : [請求番号] 式     : Format(DMax("請求番号","請求テーブル")+1,"A0001") ------------------------------------------------- となっています。 念のため、主キーの入力モードを切り替えたり、式の"A0001"を単純に"1"にしたりしましたが、 請求番号はエラーが発生します。 原因がまったくわかりません。 よろしくお願いします!

  • Access マスターテーブル

    Accessについて。 テーブル1がID(主キー)、注文日、商品番号、納期など入力欄の項目で、テーブル2が商品番号(主キー)、商品名で商品のマスターテーブルになっています。 商品番号を入力すれば商品名が表示されるようにクエリを作成し、そのクエリからフォームを作っています。 ここまでは良いのですが、新しい商品番号を入力したときに限りフォームから商品名も入力する事でマスターテーブルに登録されるようにしたいのですが、どうすれば良いでしょうか?

  • COUNTについて

    今2つのテーブル(table1には商品IDと商品名、table2にはレシートIDと商品ID)を用い、 table1にある商品がtable2に何回登場しているかCOUNTを用いて数えたいのですが、 1回も登場しない商品が結果に表示されなくて困っています。 以下の様なテーブルを用いています。 [table1] 項目:item_id(主キー)|name 0|"item0" 1|"item1" 2|"item2" [table2] 項目:detail_id(主キー)|item_id(外部キー) 0|0 1|0 2|1 このとき、 SELECT table1.name,COUNT(*) FROM table1,table2 WHERE table1.item_id = table2.item_id GROUP BY table1.name; のようなSQL文だと、結果にitem2が含まれず、 item0とitem1の登場回数だけ表示されてしまいます。 これをitem2は0回登場していることがわかるように出力したいのですが、 どうしたらいいでしょうか。

    • ベストアンサー
    • MySQL
  • アクセスについて教えてください。

    アクセス2002 XP使用 Aテーブル ID 氏名 電話番号 住所  などの個人情報入力 Bテーブル ID (リレーションするためのID主キー) 管理ID 購入商品 上記のように今作っているのですが、AテーブルIDとBテーブルは1対多でのリレーションしてます。 フォームで帳票形式で見たとき、 管理NOの数だけレコード表示されるのはいいのですが、 AテーブルID 1に対し、管理IDが111と三件分あるとして、(勿論BテーブルIDには123となってます) AテーブルID1にひとつ、受付NOを追加して、   ID  受付NO  管理ID   1   1    1   1   2    1   1   3    1   2   1    2   2   2    2   3   1    3 見たいに受付NOがIDごとに123。。。と自動入力されル洋にしたいのですがどのようにすればできますか?素人なので説明もうまくできなくわけが変わらないかもしれませんがおしえてください。よろしくお願いします。

  • 複数のテーブルに対して・・・

    過去に同様の質問があったかも知れませんが、Accessのバージョンがかなり古いので質問させて下さいね。 Access97(すみません、ホント古くて…)で、下のような顧客情報管理ファイルを作成しました。 テーブルA<→フォームA> ・顧客ID(主キー: テキスト型) ・氏名 ・情報A1, A2~ ・入力フォームB~への移動ボタン(同一IDレコードの表示) テーブルB<→フォームB> ・顧客ID(主キー: テキスト型) ・情報B1, B2~ テーブルC<→フォームC> ・顧客ID(主キー: テキスト型) ・情報C1, C2~ 最初からテーブルA~Cを結合したものを作ればよかったのですが、 それぞれのテーブルについて細かい入力項目が30~40個あるため、 分割して作成してしまいました(そして今後もテーブルは増える可能性大です)。 現在、テーブルAにだけ、20人分のデータが入っています。 今後も顧客数やテーブルが増える予定なのですが、 その都度テーブルごとに顧客IDをいれるのが面倒になってきました。 そこでお訊ねしたいのですが、テーブルA(を元にしたフォームA)に顧客IDを入れると、 テーブルBやCにも同じテキストが入力されるような設定は可能でしょうか。 最初、クエリーで連結しようとしたのですが、 既にテーブルAにいくつかデータが入っているせいか、どうも上手く反映されません。 単に私の参照方法が下手だったからかもしれませんが…。

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

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

  • Access アクセスについて

    Accessでデータベースを作っています。 テーブル、クエリは下記のようになっており、リレーションシップで紐付けしてあります。 クエリからフォームを作成し、商品番号を入力することでマスタテーブルに登録されていれば自動で商品名等の情報が表示されるようになっています。(フォーム1) 商品番号を入力しカーソルが移動した時、マスタテーブルに該当する項目がなかった場合、マスタテーブルから作成した新規追加用のフォームが表示されるようになっています。(サブフォームではありません) 新規追加用フォームに商品名を入力し、閉じてもフォーム1の商品名の欄に反映されません。新規追加用フォームを閉じる時にVBAで”Requery”,”Refresh”もやってみましたがダメでした。商品番号を入力し直すと表示されます。 どうすれば自動で商品名が表示されるようになるか教えてください。 テーブル1(入力用) 1.ID(主キー) 2.商品番号 3.etc. テーブル2(マスタテーブル) 1.商品番号(主キー) 2.商品名 3.etc. クエリ 1.ID(テーブル1) 2.商品番号(テーブル1) 3.商品名(テーブル2) 4.etc.(テーブル2) 5.etc.(テーブル1)

  • 管理番号が2つあるデータの設計と抽出について

    WindowsXP、Access2007を使用しています。 レンタルしている商品の管理番号が2つあります。一つはお客様用の番号で、お客様の要望により番号が変更されることがあります。もう一つは会社の管理用の番号で、番号が変わることはありません。 検索する際は、最新のお客様用管理番号で検索したいと思っています。(会社の管理番号で検索することはありません。又、お客様用の管理番号は過去に重複する番号があったりするので、最新の番号で検索しなければなりません。) そのレンタルの入出荷の管理システムを作っています。 T管理台帳・・・シリアルNO(テキスト、主キー)サイズID(数値)仕様ID(数値)、仕入時管理番号(テキスト) T台帳明細・・・シリアルNO(テキスト、主キー)、明細NO(数値、主キー)、最新管理番号(テキスト) 上記のテーブルを基に”動静入力フォーム(T管理台帳)”、”動静入力サブフォーム(T台帳明細)”を作りました。 以前は、T管理台帳にも最新管理番号のフィールドを作って、フォームを閉じる際にサブフォームから代入させていました。 今回、作り直すことになりT管理台帳とT台帳明細をクエリで結ぶことで、T管理台帳に最新管理番号のフィールドを作らなくても検索などできるのではないかと思い、色々ためしています。 が、更新ができないクエリになってしまい困っています。 まず、上記のようなデータだと、T管理台帳に最新管理番号フィールドを作らなければ、最新管理番号での検索は難しいですか? そもそもテーブルの設計が悪いのか、やり方がまずいのかわからず困っています。

  • フォームから2つのテーブルにデータを書き込みたい

    Accessで T_aテーブルとT_bテーブルがありそれぞれのフィールドが以下のようになっているとします。 T_a:フィールド名 データ型    ID  オートナンバー型    商品番号 テキスト型 主キー T_b:フィールド名 データ型    ID  オートナンバー型 主キー    商品番号 テキスト型 このときフォームから入力したデータをそれぞれのテーブルの商品番号に追加したいのですがどのようにすればよいのでしょうか。  よろしくお願いいたします。