- 締切済み
ACCESS2000の主キー重複について
いつもお世話になっています。 早速ですが、お教えください テーブル名:AMaster フィールド名:B があります。 「B」は主キーになっていまして、ユーザーが任意に数字をいれることになります。 主キーになっていますので基本的には重複しないのですがユーザーの押し間違いなどによって重複してしまった場合 [Microsoft][ODBC Microsoft Access Driver] インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 といったエラーメッセージが出ます。これは出ても構わないのですがツールバーの「戻る」でしか今後の操作ができなくなってしまうので(ユーザーはPC超初心者)何らかの形でエラーメッセージとともに任意のページへ戻れるようにしたいと考えています。 つきましては、「B」フィールドにあるデータとこれから入力される数値が重複していたら・・・という記述をお教えいただきたいと思います。 ASPにて作成していますのでそれに対応した記述ですとありがたいです。 過去のログに似たようなものがありましたがこちらを参照してもボクにはわかりませんでした。 http://okweb.jp/kotaeru.php3?q=357614 ボクも何分初心者なのでわからないことだらけですがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- iiikkk
- ベストアンサー率37% (92/247)
#1です。 こちらにACCESSのサンプル付きで詳しく載っていました。 http://www.tsware.jp/labo/labo_35.htm 過去ログを拝見して、ACCESSにはDCountという便利なものがあるんだなぁと勉強させていただきました。 が、上記参照ページにも書かれてるとおり、速度的に問題有りのようですので、一生使うことはないとは思いますが。 で、私が挙げていたのが参照ページで言うところの3.のパターンによるものです。 簡単に書くと、 登録ボタン等のイベントを発行する際に、下記を行います。 #ユーザーが入力した値が999とします。 select count(*) from AMaster where B = 999 上記を発行し、 結果が0であれば、 Insert into AMaster (B) values (999) 結果が0以外であれば、 既に存在するということでエラー処理 という感じです。
- iiikkk
- ベストアンサー率37% (92/247)
主キーを入力させること自体、DB設計の間違いではないですか? 私が設計する場合は、主キーは自動振りにします。 まー、、、それは置いといて、 こういう場合は下記のようにするしかないですね。 #ACCESSは使ったことがないので、抽象的ですが 入力された内容でSELECT SELECTできたら、重複してしまうので、エラー SELECTできなければ、INSERT
補足
ありがとうございます。 DB設計自体は前の担当者が行ったもので担当者が辞めてしまい急遽配属されたものですから右も左もわからない状況です。 入力された内容でSELECTとはどんなものなのでしょうか? 全くわからない初心者なので参考にできそうなステートメント(?)を書いていただけるとありがたいのですが。