Microsoft Access 掲示板

サブフォームの入力内容をチェックしたい

3 コメント
views
4 フォロー

先日質問した者です。その際はhatenaさまの回答でお世話になりました。別の事でやり方が分からない事がでてきました。
メイン・サブフォームがあります(メインIDでリレーション)。
サブフォームにはフィールドがいくつかあります。F1、F2・・・
F1、F2はコンボボックスでID選択となってます。F1選択時はF2がNULLの時に仮の項目(ID:90)が一旦代入される様にしてます(F2を先に選択時はF1がそうなる様にしてます)。仮の項目はフォームを閉じるまでに別な項目(ID:90以外)を選択させたいので、メインフォームにある閉じるボタンに注意喚起の下記のコードを記述しました。(クリック時イベント)
Dim check1 As Integer, kaeri As Integer
check1 = DCount("*", "クエリ1", "[F_Sub].Form![F1]=90 Or [F_Sub].Form![F2]=90")
If check1 > 0 Then
   kaeri = MsgBox("項目90がありますが、そのまま閉じていいですか?", vbYesNo)
End If
その後はvbYes、vbNoの処理をさせてます。クエリ1はチェック用にフォームのメインIDだけを条件にしたものを用意してます(DCountの条件を一度に記載が難しかったので)。
これで出来たと思ったのですが、このコードだとサブフォームのフォーカスのある行でしかチェックが出来てない事に気づきました。例えば2行目に項目IDの90があり、フォーカスが1行目の状態で閉じるボタンではスルーしてしまいます。
サブフォーム全体をチェックさせる事は可能でしょうか?

Batsu
作成: 2024/03/21 (木) 16:08:13
通報 ...
1
hiroton 2024/03/21 (木) 16:37:47 c2bc1@f966d

きちんと「クエリ1」に存在するフィールドを指定するだけでは?

DCount("*", "クエリ1", "[F1]=90 Or [F2]=90")

質問文の状態では、「クエリ1」とは無関係の内容を抽出条件にしているので、「『クエリ1』とは無関係な内容の真偽によって、『クエリ1』の全件数または0どちらかの数値を得る」という計算になっています

2

メイン・サブフォームがあります(メインIDでリレーション)。

サブフォームのリンク親フィールド、リンク子フィールドに「メインID」が設定されている状態でしょうか。

サブフォームのフォームヘッダーかフォームフッターにテキストボックスを配置して
下記のように設定します。

名前 サブチェック
コントロールソース =Sum([F1]=90+[F2]=90)<>0

If Me.F_Sub.Form!サムチェック Then
   kaeri = MsgBox("項目90がありますが、そのまま閉じていいですか?", vbYesNo)
End If

Falseは0、Tureは-1なので、90の-件数になることを利用しています。
このようなことを使うのはちょっとという場合は、

コントロールソース =Sum(IIf([F1]=90,1,0)+IIf([F2]=90,1,0))<>0

3
Batsu 2024/03/22 (金) 08:40:05 ddfe5@93384

hirotonさま:ありがとうございます。初歩的なミスをしてました。確かにそうですね、修正したら機能しました。フォームの入力内容とクエリ値がごっちゃになってました。
hatenaさま:ありがとうございました。なるほどです。ちょっとした事ですが中々思いつかないアイデアです。参考にします。