• ベストアンサー

access 登録時の重複チェック

ご存知の方、教えてください。 入金処理の画面を作成しています。 登録をするときに、すでに入金がされている場合は、「入金済です」とメッセージを出したいです。 登録をするテーブルは「家賃処理」のひとつです。 フィールド名は、「お客様ID」「金額」「消費税」「合計」「領収日」「年度」「月分」があります。 重複チェックをしたいのは、「お客様ID」「年度」「月分」です。 つまり、例えば「Aさんは、2006年6月分の家賃をすでに入金してくれて、処理をしたかどうか」をチェックしたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>「お客様ID And 年度 And 月分」と入れ替えてみたら、「生成されていません」とメッセージ "お客様ID = '" & Me!お客様IDのようにテーブルのフィールドとフォームのコントロール名を使わないとエラーになってしまいます。 Me!お客様ID もしくは Forms!フォーム名!お客様ID でフォーム上のコントロールの値を代入できます。 >すでに入金がされている場合は、「入金済です」とメッセージを出したい フォームの月分のコントロールのプロパティの更新後処理にADOなら Dim Rs As ADODB.Recordset Dim strSQL As String strSQL = "" strSQL = strSQL & " Select * From 家賃処理 " strSQL = strSQL & " Where お客様ID = '" & forms!フォーム名!お客様ID & "'" strSQL = strSQL & " And 年度 = '" & forms!フォーム名!年度 & "'" strSQL = strSQL & " And 月分 = '" & forms!フォーム名!月分 & "'" Rs.Open strSQL, CurrentProject.Connection If Rs.EOF = False Then   If MsgBox("入金済みです", vbOKCancel) = vbOK Then   Cancel = True   End If End If DAOなら月分のコントロールのプロパティの更新後処理に Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("家賃処理", dbOpenDynaset) rs.FindFirst ("お客様ID = '" & Me!お客様ID & "'" And "年度 = '" & Me!年度 & "'" And "月分 = '" & Me!月分 & "'") If Not rs.NoMatch Then If MsgBox("入金済みです", vbOKCancel) = vbOK Then Cancel = True End If End If End Sub ざっと書いてしまいましたが重複していれば月分を入力した後これで表示されます。

hara88
質問者

お礼

ありがとうございました。 最初の方法で試してみたところ、なんとかできました。 まだ初心者なので、とても助かりました。

その他の回答 (2)

  • 5qoo
  • ベストアンサー率48% (20/41)
回答No.2

テーブルで「お客様ID」「年度」「月分」のフィールドをグループにした重複なしのインデックスを設定する。 固有の値を「はい」にすれば絶対に重複で入力できなくなります。

参考URL:
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B402068
hara88
質問者

お礼

ありがとうございました! 参考にさせていただきます。

  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.1

1.SQLで家賃処理テーブルを検索する。  SELECT * FROM 家賃処理 WHERE お客様ID="Aさん" AND 年度="2006" AND 月分="6" 2.DLookup 関数で検索する。  DLookup(お客様ID,家賃処理,お客様ID="Aさん" AND 年度="2006" AND 月分="6") こんな感じでしょうか? どちらかお好きなほうで...

hara88
質問者

補足

ipsum11さん、早速の回答ありがとうございました。 2番のDLookup関数で検索をしようと思います。 フォームのことを説明するのを忘れていましたが、 フォームにも同じテキスト名がついています。 DLookupのすぐ後ろにくる「お客様ID」は、家賃処理のフィールド名ですが、複数を検索する場合は、どのようにここは書いたらいいのでしょうか? 見よう見まねでこの部分を 「お客様ID And 年度 And 月分」と入れ替えてみたら、「生成されていません」とメッセージが返ってきてしまいました。 すみません、ビギナーなので教えてくださると助かります。

関連するQ&A