二重登録有無の確認について

解決


サンプー  2007-03-19 22:12:35  No: 25409

DLpro6,InterBase6,XPProです。
データベースに登録を行う際に、二重登録の防止の目的で、以下のような関数を宣言し、これでチェックを行っています。疑問なのは、この方法が一般的かまた適切かどうかです。どなたかお教え下さい。

データ(tテーブル名 UserMas)

  ID  F1    F2
   1  aaaa  bbbb
   2  cccc  dddd
   3  eeee  ffff

private
 function CheckPastReg(S,S1,S2 : String) : Booleann;
/////

function  CheckPastReg(S1,S2 : String) : Booleann;
var
begin
 Result := True;
 Case DM.IBDsetUser.locate('F1;F2',VarArrayOf([S2,S3]),loCaseInSensitive) of
True:
 Result := True;
False :
 Result := False;
end//Case
end;


HOta  2007-03-19 23:41:22  No: 25410

一般的かまた適切かは、それぞれです。
早い遅いは別にして、この方法で、二重登録の防止はできます。


サンプー  2007-03-20 03:41:57  No: 25411

HOtaさんありがとうございす
データ数が3〜4万件程度となったときには、ストレスなくチェックできるのでしょうか?ご存知なら、教えて下さい。できれば、早い方法でチェックを行いたいと思います。


orz  2007-03-20 04:29:53  No: 25412

> データ数が3〜4万件程度となったときには、ストレスなくチェックできるのでしょうか?

OracleでLocate使って検索した場合・・・数秒、下手すると十数秒待機もありうる。
個人的にストレスだ・・・が、これがストレスにならないなら、無問題

Interbaseは知らないが、SQLをたたけるなら、
------
Select Count(*) FROM テーブル名 
WHERE F1 = 'てきとうな値' AND F2 = '適当な値'
------
あたりを使い、IBQuery(でいいのか?).Fileds[0].AsInteger > 0 で、
登録済みなどとしたほうがよかろうと思う・・・
それより、(本当に知らないが)できるならインデックスとかキーとかつけて、
DB上で重複不可にしたらいいのではないかと思う。

などと、IBもFBも使ったことがない雇われプログラマーが一言述べてみる。


サンプー  2007-03-20 17:39:51  No: 25413

orzさんありがとうございます
以下の方法でも、いいのかなと思ってもいました。過去には、この方法で、行ったこともありました。

>IBQuery(でいいのか?).Fileds[0].AsInteger > 0 で、
>登録済みなどとしたほうがよかろうと思う・・・

以下の方法について、何か参考となるサイトでもあれば教えて頂くと参考になります
>それより、(本当に知らないが)できるならインデックスとかキーとかつけ>て、
>DB上で重複不可にしたらいいのではないかと思う
何せ、このサイトと少ない市販の参考書を片手に独学でDBを作成中なものでわからないことや一般的なんだろうかといったことが山積みです。


orz  2007-03-20 18:18:03  No: 25414

たぶん、キーワードとしては、PRIMARY KEY

過去ログにも主キーつきのテーブル作成の例らしきものがあるのだが、
参考になるだろうか?
https://www.petitmonte.com/bbs/answers?question_id=966

などと、密かにFBを使ってみることを考えている私がいる。

やはり、他の識者の意見がほしいところです。


サンプー  2007-03-22 18:10:51  No: 25415

ORZさんありがとうございます。もう少し情報がほしかったのですが、現在のままで、何とかいけそうなので、とりあえず、解決とします。自分なりに、ロジックをもう少し考えてみようと思います


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加