- ベストアンサー
ACCESS入力での重複キーチェック
ACCESSを初めて使う初心者です。 ACCESSで携帯電話の管理を行うデータベースを作ろうと考えています。 電話番号をキーにして携帯電話台帳にデータを入力するフォームを作りました。 当然、電話番号は重複なしのインデックス項目にしています。 しかしフォームを作って入力を行うと、最初に電話番号を入力した時には、 まだ重複のチェックは行われず、使用者等のすべての項目を入力し終わって、 次のデータの入力を行おうとした時に初めて、「重複キーがある」というような メッセージが出てきます。(一般使用者には分かりにくいメッセージだと思います) これを最初に電話番号を入力した時点で直ちに重複チェックを行って、 重複がある場合にはエラーにして、以下の項目の入力はさせないようにする。 そして適切な指示を表示するには、どうしたらいいでしょうか? マニュアルに書いてある通りにやってみて、一応できたという程度の全くの初心者 です。ピントの外れた質問かもしれませんがどうかよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
電話番号のテキストボックスのプロパティのデータタブで、下記のように設定します。 入力規則 DLookup("電話番号","テーブル名","電話番号='" & [電話番号] & "'") Is Null エラーメッセージ この電話番号は既に登録されてます。別の電話番号を入力してください。
その他の回答 (3)
#1です。 >「レコードセレクタ」というのはどこにあったでしょうか? たいていはフォームの左端です。
お礼
q09さん。 ありがとうございました。 早速、今日会社でやって見ます。
- mitarashi
- ベストアンサー率59% (574/965)
No.2の方の回答で必要十分と思いますが、試しにVBAでやってみました。テーブルから自動作成した単票フォームの、IDフィールド(電話番号を入れている)の連結テキストボックスのコードです。単票フォームを開いた時点で、テーブル(T_testという名前)に既に接続していると思いますが、下記コードは動作する様です。 Private Sub ID_BeforeUpdate(Cancel As Integer) Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim mySQL As String Dim telNo As String telNo = Me.ID Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient mySQL = "SELECT T_test.ID FROM T_test WHERE (((T_test.ID)='" & telNo & " '));" rs.Open mySQL, cn, adOpenForwardOnly, adLockReadOnly If rs.RecordCount = 1 Then MsgBox telNo & "は既に存在します" Me.Undo End If rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub VBAについては、必要なら下記ページなどをご覧下さい。 http://www.mahoutsukaino.com/ac/ac2002/vba/vba03/v03.htm
お礼
mitarashiさん。 ありがとうございます。 少し私には難しそうですが ACCESSを使うならやはりVBAの勉強が必要なんでしょうか? これまでEXCELをマクロもVBAのなしでやってきたのですが 他人に使わせるとか言うことになると必須なのかな・・・
電話番号を入力した直後にレコードセレクタをクリックされたらどうでしょう。(私の記憶に間違いがなければ、)そのレコードが保存され(ようと)しますから、もし主キーの値が重複しているとエラーが出るのではないでしょうか。
お礼
q09さん。 ありがとうございます。 今は家にいてACCESSの画面を確認できないのですが 「レコードセレクタ」というのはどこにあったでしょうか?
お礼
hatena1919さん。 ありがとうございます。 早速明日会社でやって見ます。
補足
教えて頂いたとおりやってうまくできました。 ありがとうございました。 しかし、ぱっと見てわかりませんでしたが 途中にシングルクォーテーションとか なかなか私には難しいでした。 またよろしくお願いします。