電子書籍の厳選無料作品が豊富!

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」を入力するにはどうすれば良いでしょうか?
以上です。何卒よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

度々のご返答ありがとうございます。
御礼が遅くなって申し訳ありません。

実のところ、まだうまくいっていません。。。
何度も見直しているのですが、どこも悪くないように思います。
何故だ・・・・(;-;)

お礼日時:2014/08/19 14:10

> =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]の最大桁数に合わせます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
質問文で分類Noと分類IDを混同していました。分類Noが正しいです。申し訳ありません。

早速試してみましたが、コンボボックスで分類Noを選択しても、原料Noは1としか表示されません・・・
おそらくDmaxの部分はNullになっていますよね。何故だ。。。

分類Noも原料Noも数値型にしています。+1等の演算があるので、数値型じゃないとダメかなとおもったので。
フォームの分類Noの型は特に指定していませんが、関係ないでしょうか?

お礼日時:2014/08/09 15:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!