
ASPで作成した画面からSQLserver2005にデータ登録を行う場合に重複データができてしまいます。
データを登録するテーブルは、主キーが設定されていません。
テーブルには本来ユニークとなる受付番号があり、画面にて登録を行う際に、画面の受付番号がテーブルに存在するか、SQLのSELECTで検索してチェックを行った後、存在しなければ登録(SELECTしてaddNew)を行っています。
このテーブルにデータ登録を行う画面は複数あり、どの画面も上記と同じ処理の流れになっています。
このような処理の流れの場合で、同一の受付番号のデータが登録されるのはどのような場合があるでしょうか。
思いつくのは、複数端末で同一受付番号を同時に登録した場合課と思うのですが、それ以外に可能性はありますでしょうか。
詳しい方、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
原因はたぶん想像されている通りかと。
ASPは本質的に複数の同時接続を扱えるようにしていますから、それに対応できるようなプログラムの記述が必要です。
SELECTしてからAddNewまでを1つのトランザクションとするような記述ができれば問題は解決するかとおもいます。
回答ありがとうございます。
質問後も調べていたのですが、原因は記述した通りしかないようでした。
回答内容を参考にプログラムを修正します。
No.1
- 回答日時:
>複数端末で同一受付番号を同時に登録した場合
ご想像の通りでしょう。
気付いた点を述べますと、先ず、主キーが無いテーブルは
レコード数が増えた時に処理効率が悪くなります。
それと、テーブル結合した時の制約も多くなるので、やはり
主キーは設けるべきです。
>SELECTで検索してチェックを行った後
マルチユーザ環境ではあまり意味がありません。
採番テーブルを設けて採番中はロックするのが普通です。
ただ、ロックとその解除は速度が遅いこと、ロック中に障害が
あった時に、復旧が難しいDBシステムがあることから、私は
普通のファイル(中身なし)を排他的に開いてミューテックスの
ように使用しています。ファイルを開けなかったタスクは数回
リトライするようにします。
ファイルを開けたタスクは「SELECTを使って・・・」をやっても
他のタスクと衝突しないので安心して番号が採れます。
ファイルのOpen/Closeは処理が速く、障害で異常終了しても
OSが自動的に閉じてくれるので、復旧の必要はありません。
回答ありがとうございます。
テーブルに主キーを設定しないのは顧客からの要望で設定することはできませんでした。
回答内容を参考にプログラムを修正します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
キヤノン アソビカメラ iNSPiC ...
-
vba マージエリアの行数を非表...
-
ffftpでファイル取得が0バイト...
-
VBAでPDFを作成する際、同じ名...
-
バッチ(bat)でリストファイルか...
-
Windowsで複数のファイルを同じ...
-
SJISで、全角文字Aの文字コード...
-
vba 空のデータをSplitする時の...
-
お世話になります。 Windows Up...
-
マクロで同じフォルダにある画...
-
エクセル・アプリケーションエ...
-
エクセルのファイル名をコピー...
-
ASP.NetでWebアプリ開発の経験...
-
エクセルに張り付けた写真のフ...
-
たくさんのフォルダーの中から...
-
SPO2測定
-
高校1年生情報の問題について。
-
エクセルのマクロについて教え...
-
インドe-Visa 承認書のApplicat...
-
SPIの非言語の割合と比が難しく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(ACCESS)複数mdbからのデータ...
-
Access2019でフォームから入力...
-
ACCESS テーブルに2行目から取...
-
エクセルからアクセスにインポ...
-
アクセス初心者に注意点を教え...
-
他ファイルのテーブルの情報を...
-
テーブルのリンク(ACCESS)
-
アクセスマクロで、csv データ...
-
データ読込時のタイムアウト
-
C#でaccdbファイルのテーブルの...
-
外部MDBのテーブル取込み
-
グループ単位にCSVファイル...
-
VBSのデータベース操作で、複数...
-
Access(ファイルの管理、イン...
-
ACCESSとエクセルのリン...
-
jspのプログラムについて
-
VBAでADOの質問です。かなり困...
-
Accessの接続先をSQLサーバ...
-
csvをSQLiteに取り込むと文字化...
-
アクセスのテーブルのリンクに...
おすすめ情報