Accessで分類毎の連番を既定値に表示したい

このQ&Aのポイント
  • Access2007で業務用のデータベースを構築し、加工食品の原料のデータベースを管理しています。原料の分類ごとに通し番号を付与し、フォーム上で既定値として表示させたいと考えています。
  • 現在のデータベースでは、「T_原料リスト」テーブルに「分類ID」・「原料No」・「原料ID」・「原料名」などのフィールドがあります。また、「T_分類マスタ」テーブルとのリレーションも設定されています。
  • 実現したいのは、フォームで「分類ID」を選択すると、その分類の中で最大の「原料No」を既定値として表示し、「原料ID」には「分類ID」と「原料No」を結合した値を自動的に入力したいと考えています。
回答を見る
  • ベストアンサー

Accessで分類毎の連番を既定値に表示したい

Access2007で業務用のデータベースを構築しております。 Excelは良く利用するのですが、Accessでは初めてになります。 ご教示のほど、よろしくお願いします。 加工食品の原料のデータベースを構築しております。 原料の分類ごとに通し番号を付与し、それをフォーム上で既定値として表示させたいと考えております。 現状は「T_原料リスト」があり、フィールドに「分類ID」・「原料No」・「原料ID」・「原料名」・・・となってます。 別途「T_分類マスタ」があり、リレーションで「分類ID」と結合しています。 実現したいのは、フォームで「分類ID」をコンボボックスから選択すると、その分類の「原料No」の最大値を既定値として表示させることです。また、「分類ID」と「原料No」を結合し「原料ID」にしたいと考えております。 例えば、分類IDで「10(糖類)」を選ぶと、原料Noの最大値が「121」と表示され、原料IDが「10121」と決まる、といった具合です。 原料IDはイレギュラーに「99999」を入力したい状況もあるかもしれませんので、手入力でも良いかなと思ってます。 私なりに調べましたところ、フォームの「原料No」のプロパティシートの既定値に =Dmax("原料No","T_原料リスト","[分類No]=&[Forms]![F_原料リスト].[分類No]")+1 と入力すれば良いはずだと思いやってみたのですが、エラー表示になってしまいます。 質問ですが、 (1)上記の式が間違っているのでしょうか? (2)もっと良い方法があればお教えいただきたいです。 (3)分類IDと原料Noを結合して、自動で「原料ID」を入力するにはどうすれば良いでしょうか? 以上です。何卒よろしくお願いします。

  • kkke
  • お礼率71% (66/92)

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

  • ベストアンサー
回答No.2

> 実現したいのは、フォームで「分類ID」をコンボボックスから選択すると、その分類の「原料No」の最大値を既定値として表示させることです。 コンボボックスの更新後処理のイベントプロシージャを下記のように記述してください。 Me.原料No.DefaultValue = Nz(Dmax("原料No","T_原料リスト","[分類No]=" & Me.分類No))+1 あるいは、 Me.原料No.Value = Nz(Dmax("原料No","T_原料リスト","[分類No]=" & Me.分類No))+1

kkke
質問者

お礼

度々のご返答ありがとうございます。 御礼が遅くなって申し訳ありません。 実のところ、まだうまくいっていません。。。 何度も見直しているのですが、どこも悪くないように思います。 何故だ・・・・(;-;)

その他の回答 (1)

回答No.1

> =Dmax("原料No","T_原料リスト","[分類No]=&[Forms]![F_原料リスト].[分類No]")+1 > と入力すれば良いはずだと思いやってみたのですが、エラー表示になってしまいます。 > > 質問ですが、 > (1)上記の式が間違っているのでしょうか? & が余分ですね。あとNz関数でNullを0に変換した方がいいでしょう。 =Nz(Dmax("原料No","T_原料リスト","[分類No]=[Forms]![F_原料リスト].[分類No]"))+1 分類No が数値型なら下記のようにしてもいいです。 =Nz(Dmax("原料No","T_原料リスト","[分類No]=" & [分類No]))+1 > (3)分類IDと原料Noを結合して、自動で「原料ID」を入力するにはどうすれば良いでしょうか? 原料ID は不必要ですね。 テーブルのデザインビューで、分類ID と 原料No で複数フィールドに主キーにしておいて、 クエリを作成して 原料ID: [分類ID] * 100000 + [原料No] とすればいいです。 クエリをテーブル代わりにフォームやレポートのレコードソースとします。 * 100000 の部分は[原料No]の最大桁数に合わせます。

kkke
質問者

お礼

ご回答ありがとうございます! 質問文で分類Noと分類IDを混同していました。分類Noが正しいです。申し訳ありません。 早速試してみましたが、コンボボックスで分類Noを選択しても、原料Noは1としか表示されません・・・ おそらくDmaxの部分はNullになっていますよね。何故だ。。。 分類Noも原料Noも数値型にしています。+1等の演算があるので、数値型じゃないとダメかなとおもったので。 フォームの分類Noの型は特に指定していませんが、関係ないでしょうか?

関連するQ&A

  • (ACCESS)連番取得について

    アクセスで顧客管理をしています。 DMax関数を用いて、レコードを追加する度に自動で連番を振る設定に したいと思っていますが、上手くいかないため質問させてください。 【テーブル名】T_顧客一覧 【入力用のフォーム名】F_顧客登録 【連番を入力させたい項目(フィールド名)】No(テーブルでは主キーに設定) とし、フォームの”No”の既定値に   =DMax("No","T_顧客一覧")+1 と入力するのですが、フォームには1としか表示されません。 非常に初歩的な質問だとは思うのですが、 何か原因として考えられることがありますでしょうか? 情報が足りないようでしたら補足させていただきます。 よろしくお願いします。

  • Access97:サブフォームを切り替え表示したい

    アクセスで仕事で用いられる専門用語の和英辞書データベースを作っております。 その辞書は用語の持つ意味や使われ方などから分類をしています。 分類一覧テーブルは分類ID,分類からなり、用語一覧テーブルは用語IDと用語からなります。 これらをつなぐのが和英辞書テーブルで、辞書ID,分類ID,用語IDからなり、 分類ID,用語IDはそれぞれ分類一覧テーブル,用語一覧テーブルのそれとリレーションシップを 組んでいます。 メインフォーム(既定のビュー=単票フォーム)には分類フィールドを作り、コンボボックスにします。 分類を選択したときまたはその横に「表示」ボタンを設置しておいてそのボタンをクリックしたときに 選択された分類に属する用語一覧がサブフォーム(既定のビュー=帳票フォーム)にリロードされてるように切り替えて表示させたいと考えています。 メインフォーム元:分類一覧テーブル,サブフォーム元:用語一覧テーブルにしたフォームは作成できました。 メインフォームのレコードを切りかえるとサブフォームも切り替わりますが、 コンボボックスの選択でサブフォームを切りかえ(たように見せ)る上記のようなフォームに このフォームから編集することはできるでしょうか? 無理なら新規にフォームを作りなおすとしてできるでしょうか? 自分の発想で2通りやってみましたが、いずれも失敗でした。 (詳しく書いたら文字数が800を超えたので省略します) テーブルの構成やリレーションを多少変えてもいいしフォームのレコードソースにクエリービルダを使ったりVBを組んでもいいので、メインフォームのコンボボックスの選択値によってサブフォームの表示を切り替える方法について教えて下さい。

  • Accessの連番について質問です。

    Accessの連番について質問です。 フォームに連番を表示させたいのですが、どうしてもうまくいきません。 当初はDcount関数を使用したのですが、パフォーマンスが非常に悪かった為、サブクエリ化を使用しようと考えています。 SELECT List.ID, List.CreDate, List.Product,  (SELECT COUNT('ID') FROM T_List AS T WHERE T.ID <= List.ID AND Cate.MaNum = '3') AS RecordCount FROM T_List AS List INNER JOIN T_MaCate AS Cate ON List.MaCate = Cate.ID WHERE Cate.MaNum = '3' ORDER BY List.ID; 実際はフォームで選択された条件を元に、SQLをString変数に代入してフォームのRecordSourceに入れています。しかし、うまくカウントできていない為、思うように表示されません。 DCount(""ID"",""Q_List"",""List.ID<="" & [List].[ID]) AS RecordCountと テーブルの変わりにクエリにすると、連番はうまく生成されるのすが、非常に時間がかかり、 マシンもブンブンとファンが回りだします。 データレコード数は現在1000レコードで、この先3000程度になります。 この辺りに詳しい方や同様に悩まれた方など、アドバイスよろしくお願いいたします。m(_ _)m サブクエリやDcount等、その他の方法等もいろいろ参考にしたいので、併せてよろしくお願いいたします。

  • アクセスフィールドに既定値

    アクセス2000を使っています。 例えばフォームのフィールド1に入力すると、フィールド2に最初からフィールド1の内容が表示され、変更することも出来るようにはならないでしょうか? 既定値として、フィールド名を入力するなど出来ないでしょうか? よろしくお願い致します。

  • Access2003での入力済のフィールドに対しての連番について。

    Access2003での連番について。 T_商品 ID:オート CODE:数値型6桁 その他何項目かのフィールドがありCODEの部分に000001~003000くらいまで入力がされています。 003001番から自動で+1していくにはフォームでどのように指定したらいいでしょうか?? 既に003000まで入力されているので最大値を求めてやってみたりしているのですが 中々うまくいきません。 よろしくお願いいたします。

  • アクセスのパラメータに既定値を表示することはできないでしょうか

    アクセスのパラメータに既定値を表示することはできないでしょうか アクセス2000です。クエリで[伝票日]から、年:Year[伝票日]のフィールドにパラメータ[何年ですか]をつけています。 それに既定値で今年が表示されるようにしたいのです。書式はyyyyになっています。 たまに2009のときもあるので、そのときは入力したいのです。 どうぞよろしくお願いします。

  • アクセスのフォームで自動連番を既定値で入力したいのです

    アクセスのフォームでデータを入力する際に、 タブストップさせずに自動採番で入力Noを入力 したいのです。元のテーブルのデータ型をカウント 型にする方法はあるのですが、そうすると入力途中で 取消し(コマンドボタン)するとカウントだけは進んで しまいます。基本的に1,2,3,4と順に番号をふってくれれば いいのですが、取消した時には入力Noも戻って欲しいのです。 これが上手くゆきません。どうしたらいいのでしょうか?

  • ルックアップウィザードはテーブルとフォーム両方に設定しなければなりませんか

    Accessでデータベースを構築しています。 テーブルと、その入力フォームがありますが、フォームを使わずにテーブルで入力することもあります。 テーブルのデザインビューで、他のテーブルをリスト表示させて入力できるようにしても、フォームでも同様に設定しないとリスト表示になりません。 どちらか片方の設定が両方に反映される方法はありますでしょうか。

  • access サブフォームにリストを表示させたいが一件しかレコードが表示されない

    現在、アクセス(ver 2000)でデータベースを作っています。 その中で、入力フォームの下に、 サブフォームを使って 入力データのリストを作成しようとしています。 サブフォームによるリスト表示は、サブフォーム作成ウィザードを使用し 入力フォームと同じテーブルを使用しています。 しかし、どうしてもレコードが一件しか表示されません。(左図)。 理想としては右図のような、複数レコードを表示をしたいのですが どうしてもやり方がわかりません。 どうすれば、右図のような複数レコードを表示できるのでしょうか。 アドバイスお願い致します。

  • ACCESS2007 DMaxについて

    WinVistaでACCESS2007を使っております。 顧客との取引履歴のデータベースを少しずつ作っております。 現在のデータベース構成は簡単に書きますと、 「顧客T」 ・顧客ID ・顧客名 ・ ・ ・ ・最終取引日 「取引T」 ・取引ID ・顧客ID(顧客Tの顧客IDとリレーション) ・取引日 ・取引内容 という感じです。 顧客Tをソースに「顧客フォーム」を作り、そのフォーム内にサブフォームで 取引履歴として「取引履歴サブフォーム」。「取引日」「取引内容」のみ表示して 入力しております。 やりたいことは、フォームを開いた際に、サブフォーム内の取引日の中で 最新の日付をメインフォームの「最終取引日」フィールドに入力して、データ を更新していきたいです。 非連結のフィールドを作って表示だけすればいいのかもしれませんが、 現状データとして格納していきたいです。 VBAでメインのフォーム「開くとき」にDMaxで最大の日付を拾えばいいかと思い 試してみましたが、エラーが出てしまいます。 いろいろ試してみましたが、記述はこんな感じです。 Me.最終取引日=DMax("日付",Me.取引履歴サブフォーム) としてみました。 どなたかお力を貸してください。

専門家に質問してみよう