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さんありがとうございす
データ数が3〜4万件程度となったときには、ストレスなくチェックできるのでしょうか?ご存知なら、教えて下さい。できれば、早い方法でチェックを行いたいと思います。
> データ数が3〜4万件程度となったときには、ストレスなくチェックできるのでしょうか?
OracleでLocate使って検索した場合・・・数秒、下手すると十数秒待機もありうる。
個人的にストレスだ・・・が、これがストレスにならないなら、無問題
Interbaseは知らないが、SQLをたたけるなら、
------
Select Count(*) FROM テーブル名
WHERE F1 = 'てきとうな値' AND F2 = '適当な値'
------
あたりを使い、IBQuery(でいいのか?).Fileds[0].AsInteger > 0 で、
登録済みなどとしたほうがよかろうと思う・・・
それより、(本当に知らないが)できるならインデックスとかキーとかつけて、
DB上で重複不可にしたらいいのではないかと思う。
などと、IBもFBも使ったことがない雇われプログラマーが一言述べてみる。
orzさんありがとうございます
以下の方法でも、いいのかなと思ってもいました。過去には、この方法で、行ったこともありました。
>IBQuery(でいいのか?).Fileds[0].AsInteger > 0 で、
>登録済みなどとしたほうがよかろうと思う・・・
以下の方法について、何か参考となるサイトでもあれば教えて頂くと参考になります
>それより、(本当に知らないが)できるならインデックスとかキーとかつけ>て、
>DB上で重複不可にしたらいいのではないかと思う
何せ、このサイトと少ない市販の参考書を片手に独学でDBを作成中なものでわからないことや一般的なんだろうかといったことが山積みです。
たぶん、キーワードとしては、PRIMARY KEY
過去ログにも主キーつきのテーブル作成の例らしきものがあるのだが、
参考になるだろうか?
https://www.petitmonte.com/bbs/answers?question_id=966
などと、密かにFBを使ってみることを考えている私がいる。
やはり、他の識者の意見がほしいところです。
ORZさんありがとうございます。もう少し情報がほしかったのですが、現在のままで、何とかいけそうなので、とりあえず、解決とします。自分なりに、ロジックをもう少し考えてみようと思います
ツイート | ![]() |