Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
フォーム上のラベルにテーブル項目の最小値を表示させる方法
投稿日時: 19/11/27 19:47:10
投稿者: HT

フォームから値を入力しテーブルへ格納させる他、テーブル項目の最小値に−1した値を、手入力によらず計算により格納したいのですが、この、最小値の取得と格納方法を教えてください

回答
投稿日時: 19/11/28 11:07:19
投稿者: sk

引用:
フォーム上のラベルテーブル項目の最小値を表示させる方法

Min 関数を用いた演算テキストボックスを
連結フォーム上に配置なさればよろしいのではないかと。

投稿日時: 19/12/04 17:55:49
投稿者: HT

skさん ありがとうございます。ご教授のとおり行いましたが
正しい最小値が取得できません(例えば、正しい最小値=マイナス11000
だとして、取得された値がマイナス10098)
新たに、QUERYを作り、最小値を表示させると、正しくでました
 
よって、テーブルに連結したフォーム上で、上記QUERYの結果を表示させ
その値を連結項目に格納することはできますか?

回答
投稿日時: 19/12/05 10:06:16
投稿者: sk

引用:
ご教授のとおり行いましたが正しい最小値が取得できません
(例えば、正しい最小値=マイナス11000だとして、取得された値がマイナス10098

フォームを開いた時点で既に、取得された最小値が正しくない、
ということでしょうか。
 
それとも、「フォームを開いた時点での最小値は -10098 で問題ないが、
カレントレコードの数値型のフィールドに対して -11000 と入力しても、
すぐさま最小値が更新されない」という意味でしょうか。

投稿日時: 19/12/07 09:26:52
投稿者: HT

skさん ありがとうございます。
フォームを開いた時点で既に、取得された最小値が正しくない状況です

回答
投稿日時: 19/12/09 13:52:43
投稿者: sk

引用:
フォームを開いた時点で既に、取得された最小値が正しくない状況です

その場合、恐らく以下のいずれかの設定/操作が行なわれていることにより、
そのフォームが読み込まれた時点でフォームフィルターが適用されている
(集計対象となるフィールドの値が -11000 であるレコードが除外されている)
からではないでしょうか。
 
・フォームの[フィルター]プロパティに何らかの条件式が設定されており、
 かつ[読み込み時にフィルターを適用]プロパティの値が「はい」である。
 
・そのフォームをマクロや VBA のコードによって開いており、
 かつ開く際に Where 条件が指定されている。
 
フィルターの適用状態に左右されないようにしたいのであれば、
Min 関数ではなく DMin 関数を使用する、という方法が挙げられます。

投稿日時: 19/12/09 16:03:37
投稿者: HT

ありがとうございました。ご教授どおり、フォームの[フィルター]プロパティに設定があり、解除したら
正しくでました
さて、更なる質問です。この最小値に−1して新規登録したいのですが、冒頭のご教授のとおり
「Min 関数を用いた演算テキストボックスを連結フォーム上に配置なさればよろしいのではないかと」行ったら、重複キーエラーとなりました。この最小値を格納する項目は、ユニークキー設定としており、これで
重複キーエラーとなっているかと思いますが、最小値に−1しているので、重複しないのでは、と思います。
コントロールソースに「=Min([台帳NO])-1」しています

回答
投稿日時: 19/12/09 17:20:16
投稿者: sk

引用:
この最小値に−1して新規登録したい

引用:
この最小値を格納する項目は、ユニークキー設定としており

引用:
コントロールソースに「=Min([台帳NO])-1」しています

この場合、ただ計算した結果をテキストボックス上に表示しているだけであり、
フィールドに対する値の格納は行なわれません。
 
[台帳NO](をコントロールソースとする連結テキストボックス)に対して
値を代入、もしくは[既定値]プロパティを設定する機能を、
イベントマクロ、またはイベントプロシージャ( VBA )によって
実装する必要があります。
 
・そのフォームの[レコード移動時]イベントが発生した時、
 「そのフォームのレコードソースであるテーブルの
 [台帳NO]の最小値から 1 を減じた結果」を求め、
 連結テキストボックス[台帳NO]の[既定値]プロパティに
 その値を設定する。
 
・そのフォームの[挿入前処理]イベントが発生した時、
 「そのフォームのレコードソースであるテーブルの
 [台帳NO]の最小値から 1 を減じた結果」を求め、
 カレントレコードの[台帳NO]に代入する。
 ([台帳NO]の値をユーザーが直接編集しない場合)
 
・そのフォームの[更新前処理]イベントが発生した時、
 もしカレントレコードが新規レコードである場合は、
 「そのフォームのレコードソースであるテーブルの
 [台帳NO]の最小値から 1 を減じた結果」を求め、
 カレントレコードの[台帳NO]に代入する。
 (マルチユーザーアクセスが想定される場合)
 
今のところ考えられるのは、以上のいずれかのケース。
 
引用:
ご教授どおり、フォームの[フィルター]プロパティに設定があり、
解除したら正しくでました

フィルターの設定に左右されないようにしたいのであれば、
既に申し上げた通り DMin 関数を使うようにした方が良いでしょう。
 
引用:
新たに、QUERYを作り、最小値を表示させると、正しくでました

引用:
(指定なし : 指定なし)

また、Access 2010 以降のバージョンにおいて accdb ファイルを使用されている場合は、
フォームではなくテーブル自身にデータマクロを仕込む、という方法も挙げられます。

トピックに返信