Microsoft Access 掲示板

Dcountを複数条件で、変数を使ってカウントしたい

3 コメント
views
4 フォロー

Dcountを複数条件で、変数を使ってカウントしたい

お世話になります。
[装置管理マスタ]というテーブルを使ったフォームに、[受注Noフル_テキスト]というテキストボックスがあります。
そのテキストボックスのコントロールソースは[受注Noフル]というフィールドです。
同じテーブルに[削除日時]というフィールドがあります。

このテキストボックスに過去のデータと重複がないか確認したいです。
[受注Noフル_テキスト]のExitイベントに以下のコードを記述しました。
Dcountを使って、削除日時フィールドが空白、かつ現在のレコード以外で、受注Noフルのフィールドが重複しているものがあるかカウントしたいです。

ところが
varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null and ID <> crid")
の部分がエラーになってしまいます。
いろいろ修正してみましたが、解決しません。
 ” や ’ の位置がおかしいのかな?と思い修正してみましたが、だめでした。
これ以外の方法で、Requeyや、クエリをつかってやってみたんですが、フォームが分割フォームのためか、自分自身をカウントしてしまい、レコードの修正時と新規レコードの入力時でカウント数が変わってしまうため、諦めました。

何をどうしたらよいのか、ご教授下さい。

Private Sub 重複確認()
'受注No重複確認マクロ

Dim varNo As String '受注Noを入れる変数
Dim varCheck As String '既登録分を調べた結果を入れる変数
Dim crid As Integer '自分自身のIDを取得する変数
crid = Me.ID'現在のレコードのID(主キー)

If IsNull(Me.受注Noフル_テキスト) = False Then
 varNo = Me.受注Noフル_テキスト ' 入力した受注Noを変数に代入
Else
 MsgBox "受注Noが未入力のため、登録できません。"
End
End If

'現在のデータをカウント対象からはずして、現在のレコードと同じ受注Noがあるかカウント
varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null and ID <> crid")

'重複条件チェック
If varCheck = 0 Then
'MsgBox "重複なし"
Else
    MsgBox "受注Noが重複しています。登録できません。"
    Me.受注Noフル_テキスト.SetFocus
End
End If
End Sub

Kanto
作成: 2022/10/31 (月) 10:58:11
通報 ...
1
Kanto 2022/10/31 (月) 11:02:07 e48ae@9a838

varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null")
の場合はコード自体はうまくいくのですが、自分自身をカウントし、結果が0にならない場合があります。

2

変数は""の外に出す必要があります。""ないだと単なる文字列です。
IDフィールドが数値型かオートナンバー型なら、下記でどうでしょう。

varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null and ID <> " & crid)
3
Kanto 2022/10/31 (月) 14:26:53 e48ae@9a838

早々のご回答ありがとうございます!
できました!

いつも " や ' の位置に悩まされ、よくわからなくなってしまいます。
これからもっと勉強します。
ありがとうございました。