- ベストアンサー
Accessで分類毎の連番を既定値に表示したい
- Access2007で業務用のデータベースを構築し、加工食品の原料のデータベースを管理しています。原料の分類ごとに通し番号を付与し、フォーム上で既定値として表示させたいと考えています。
- 現在のデータベースでは、「T_原料リスト」テーブルに「分類ID」・「原料No」・「原料ID」・「原料名」などのフィールドがあります。また、「T_分類マスタ」テーブルとのリレーションも設定されています。
- 実現したいのは、フォームで「分類ID」を選択すると、その分類の中で最大の「原料No」を既定値として表示し、「原料ID」には「分類ID」と「原料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
その他の回答 (1)
- hatena1989
- ベストアンサー率87% (378/433)
> =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]の最大桁数に合わせます。
お礼
ご回答ありがとうございます! 質問文で分類Noと分類IDを混同していました。分類Noが正しいです。申し訳ありません。 早速試してみましたが、コンボボックスで分類Noを選択しても、原料Noは1としか表示されません・・・ おそらくDmaxの部分はNullになっていますよね。何故だ。。。 分類Noも原料Noも数値型にしています。+1等の演算があるので、数値型じゃないとダメかなとおもったので。 フォームの分類Noの型は特に指定していませんが、関係ないでしょうか?
お礼
度々のご返答ありがとうございます。 御礼が遅くなって申し訳ありません。 実のところ、まだうまくいっていません。。。 何度も見直しているのですが、どこも悪くないように思います。 何故だ・・・・(;-;)