Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
Accessカウントの継承を回避し...
投稿日時: 22/12/05 17:45:16
投稿者: hiroemon_

Access初心者です。
ネットでいろいろ調べながらやってます。
 
フォームを作成し、ボタンを押すとカウントするテキストボックスを作っています。
レコードの登録はイベントビルドのマクロビルダーでボタンを作成し、
次のレコードに移動してます。
 
カウントアップはしますが、次のレコードにいき、
新しいフォームでは見た目0となっていますが、
ボタンを押すと前回の続きからカウントします。
 
ちなみにテキストボックスの規定値は0を設定しています。
 
ご教示いただけませんでしょうか。
 
非連結にすると、0に戻りますが1しかカウントしません。
連結にすると、普通にカウントしますが次のレコードでは続きの数からカウントします。
 
よろしくお願いします。
 
 
Private Sub C_yuuko_Click()
 
Me!有効数 = Nz(DMax("有効数", "F_main", Criteria部), 0) + 1
 
End Sub
 
Private Sub C_muko_Click()
 
Me!無効数 = Nz(DMax("無効数", "F_main", Criteria部), 0) + 1
Me.Recalc
 
End Sub

回答
投稿日時: 22/12/06 11:15:28
投稿者: sk

引用:
フォームを作成し、ボタンを押すとカウントするテキストボックスを作っています。
レコードの登録はイベントビルドのマクロビルダーでボタンを作成し、
次のレコードに移動してます。

・そのフォームのレコードソースは何であるか。
 
・そのフォームは単票フォームか、それとも帳票フォームか。
 
引用:
Me!有効数 = Nz(DMax("有効数", "F_main", Criteria部), 0) + 1

引用:
Me!無効数 = Nz(DMax("無効数", "F_main", Criteria部), 0) + 1

・仮にそのフォームのレコードソースがテーブル(名前は現在不明)であり、
 そのテーブルに[有効数]と[無効数]という 2 つの数値型のフィールドが
 定義されているとして、それらの各フィールドの役割や使用目的は
 どのようなものであるのか。
 
引用:
非連結にすると、0に戻りますが1しかカウントしません。
連結にすると、普通にカウントしますが次のレコードでは続きの数からカウントします。

・[有効数]や[無効数]の値のインクリメント処理を行なう目的とは
 どのようなものであるのか。
 
・インクリメント処理の対象となるのはフォームのカレントレコードのみか。
 それともフォームのレコードソースの全てのレコードか。
 それともある一定の条件に該当する一部のレコードか。
 
とりあえず、以上の点についてそれぞれ明記されることをお奨めします。

投稿日時: 22/12/14 16:52:03
投稿者: hiroemon_

ありがとうございます。
遅くなりましたが、以下記載します。
 
・そのフォームのレコードソースは何であるか。
→テーブル「F_main」です
 
・そのフォームは単票フォームか、それとも帳票フォームか。
→単票フォームです
 
・仮にそのフォームのレコードソースがテーブル(名前は現在不明)であり、
 そのテーブルに[有効数]と[無効数]という 2 つの数値型のフィールドが
 定義されているとして、それらの各フィールドの役割や使用目的は
 どのようなものであるのか。
→有効数:作業した対象の数をカウントするため、ボタンを設置してます
 無効数:作業中に対象外と判明した数をカウントするため、ボタンを設置してます
 
・[有効数]や[無効数]の値のインクリメント処理を行なう目的とは
 どのようなものであるのか。
→作業種別「有効数=対象」「無効数=対象外」をカウントするためのものです
 
・インクリメント処理の対象となるのはフォームのカレントレコードのみか。
 それともフォームのレコードソースの全てのレコードか。
 それともある一定の条件に該当する一部のレコードか。
→他に「担当」「カテゴリ」「開始時間」「終了時間」がありますが、
 インクリメント処理は「有効数」「無効数」のみです
 
よろしくお願いします。
 

sk さんの引用:
引用:
フォームを作成し、ボタンを押すとカウントするテキストボックスを作っています。
レコードの登録はイベントビルドのマクロビルダーでボタンを作成し、
次のレコードに移動してます。

・そのフォームのレコードソースは何であるか。
 
・そのフォームは単票フォームか、それとも帳票フォームか。
 
引用:
Me!有効数 = Nz(DMax("有効数", "F_main", Criteria部), 0) + 1

引用:
Me!無効数 = Nz(DMax("無効数", "F_main", Criteria部), 0) + 1

・仮にそのフォームのレコードソースがテーブル(名前は現在不明)であり、
 そのテーブルに[有効数]と[無効数]という 2 つの数値型のフィールドが
 定義されているとして、それらの各フィールドの役割や使用目的は
 どのようなものであるのか。
 
引用:
非連結にすると、0に戻りますが1しかカウントしません。
連結にすると、普通にカウントしますが次のレコードでは続きの数からカウントします。

・[有効数]や[無効数]の値のインクリメント処理を行なう目的とは
 どのようなものであるのか。
 
・インクリメント処理の対象となるのはフォームのカレントレコードのみか。
 それともフォームのレコードソースの全てのレコードか。
 それともある一定の条件に該当する一部のレコードか。
 
とりあえず、以上の点についてそれぞれ明記されることをお奨めします。

回答
投稿日時: 22/12/15 14:33:34
投稿者: sk

引用:
→有効数:作業した対象の数をカウントするため、ボタンを設置してます
 無効数:作業中に対象外と判明した数をカウントするため、ボタンを設置してます

引用:
→作業種別「有効数=対象」「無効数=対象外」をカウントするためのものです

「作業した対象」や「作業中に対象外と判明」というのが
具体的に何を表しているのかが不明ですが、その対象なり
判定結果なりを示す値(件数ではなく属性)を格納するための
フィールドは、テーブル[F_main]に定義されていないのでしょうか。
 
引用:
・そのフォームのレコードソースは何であるか。
→テーブル「F_main」です
 
・そのフォームは単票フォームか、それとも帳票フォームか。
→単票フォームです

引用:
Me!有効数 = Nz(DMax("有効数", "F_main", Criteria部), 0) + 1

例えば、単純に「その単票フォームのカレントレコードの[有効数]の
値を 1 増やす」という処理を実行したいだけなら、DMax 関数を
呼び出すまでもなく、次のように記述なさればよいでしょう。
 
-----------------------------------------------------------
 
Me![有効数] = Nz(Me![有効数], 0) + 1
 
-----------------------------------------------------------
 
引用:
非連結にすると、0に戻りますが1しかカウントしません。
連結にすると、普通にカウントしますが次のレコードでは続きの数からカウントします

しかし上記の文脈からして、ここでの[有効数]や[無効数]は
[F_main]のそれぞれのレコードごとに記録されるべき類の
データであるようには思えません。
 
もし、ここでの[有効数]や[無効数]として得ようとしている値が
[F_main]の全てのレコードを対象とした何らかの集計処理によって
求められる「計算結果」に過ぎず、カレントレコードが編集される都度
再計算された結果を表示できればそれで充分であり、いちいち[F_main]の
レコードにその値を保存しておく必要がないのであれば、
「コマンドボタンを押すごとに値を 1 ずつ増やす」みたいな
入力操作はそもそも必要ないでしょう。
 
例えば、フォームフッターセクション上に演算テキストボックスを
2 つ設けてやれば済む問題ではないのでしょうか。

投稿日時: 22/12/15 16:51:41
投稿者: hiroemon_

ありがとうございます!
こちらで解決しました。
 
ご指摘いただきました点は考え方がずれているかもしれません。。。
これからいろいろやってみたいと思います。
 

引用:
Me!有効数 = Nz(DMax("有効数", "F_main", Criteria部), 0) + 1

例えば、単純に「その単票フォームのカレントレコードの[有効数]の
値を 1 増やす」という処理を実行したいだけなら、DMax 関数を
呼び出すまでもなく、次のように記述なさればよいでしょう。
 
-----------------------------------------------------------
 
Me![有効数] = Nz(Me![有効数], 0) + 1
 
-----------------------------------------------------------