Q&A

  • 데이타 존재유 무 확인방법?
프로그램을 하다보니 고민되는게 한두가지가 아니네요



다름이 아니라

query컴포넌트에 updatesql컴포넌트를 연결하여 사용하는데

새로운 레코드 추가시 기존에 이미 등록된 코드인지

체크하여, 있으면 수정하고, 없으면 추가한는 프로그램을

구현하는데, 등록여부를 체크하는 좋은 방법좀 알려주세요



저는 등록하려는 코드값을 쿼리에 param값으로 전달하여

쿼리를 close -> open하는 방식으로 처리 하고있는데

데이타가 많을때 검색결과가 너무 늦는것 같아

더 좋은 방법이 없는지 질문을 드립니다.



고수님들 조언 부탁합니다.



2  COMMENTS
  • Profile
    aparadin 2001.09.12 19:31
    초보 wrote:

    > 프로그램을 하다보니 고민되는게 한두가지가 아니네요

    >

    > 다름이 아니라

    > query컴포넌트에 updatesql컴포넌트를 연결하여 사용하는데

    > 새로운 레코드 추가시 기존에 이미 등록된 코드인지

    > 체크하여, 있으면 수정하고, 없으면 추가한는 프로그램을

    > 구현하는데, 등록여부를 체크하는 좋은 방법좀 알려주세요

    >

    > 저는 등록하려는 코드값을 쿼리에 param값으로 전달하여

    > 쿼리를 close -> open하는 방식으로 처리 하고있는데

    > 데이타가 많을때 검색결과가 너무 늦는것 같아

    > 더 좋은 방법이 없는지 질문을 드립니다.

    >

    > 고수님들 조언 부탁합니다.

    =========================================================================

    Query.Open;

    Query.Locate(Table.FieldName,Edit1.Text,[loPartialKey,loCaseInsensitive]

    (비스무리한거)(정확히일치하는거)

    function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;

    알고계시겠지만 혹시나 하는마음에...^^;;;;;;

  • Profile
    loke 2001.09.13 03:58






    aparadin wrote:

    > 초보 wrote:

    > > 프로그램을 하다보니 고민되는게 한두가지가 아니네요

    > >

    > > 다름이 아니라

    > > query컴포넌트에 updatesql컴포넌트를 연결하여 사용하는데

    > > 새로운 레코드 추가시 기존에 이미 등록된 코드인지

    > > 체크하여, 있으면 수정하고, 없으면 추가한는 프로그램을

    > > 구현하는데, 등록여부를 체크하는 좋은 방법좀 알려주세요

    > >

    > > 저는 등록하려는 코드값을 쿼리에 param값으로 전달하여

    > > 쿼리를 close -> open하는 방식으로 처리 하고있는데

    > > 데이타가 많을때 검색결과가 너무 늦는것 같아

    > > 더 좋은 방법이 없는지 질문을 드립니다.

    > >

    > > 고수님들 조언 부탁합니다.

    > =========================================================================

    > Query.Open;

    > Query.Locate(Table.FieldName,Edit1.Text,[loPartialKey,loCaseInsensitive]

    > (비스무리한거)(정확히일치하는거)

    > function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;

    > 알고계시겠지만 혹시나 하는마음에...^^;;;;;;



    쿼리를 어차피 오픈 하여야 한다면 님이 사용하는 방법으로 하는게 옳은것 같은데요...

    만약 오픈되어 있는 쿼리를 사용한다고 하더라도 locate 문을 사용한다면 쿼리의 결과에 따라서 insert 나 update 를 결정해야 하는데... 쿼리 오픈시 where 문으로 처리 했다면 다른 결과가 나올수가 있죠.. 예를 들어 where name like '김' 이라고 쿼리를 주셨는데 다음에 입력할 데이터가 '홍길동'을 입력한다면 디비에 홍길동이 있어도 없는것 처럼 insert 문을 쓰는것이 되기 때문에 추천하고 싶은 방법은 쿼리를 이용해서 정확히 데이터가 있는지 없는지 확인 하는 것이 좋겠네요...



    query1.close;

    query1.sql.clear;

    query1.sql.add('select * from dbname');

    query1.sql.add('where keyfield1 = :keyfield1 and keyfield2 = :keyfield2');

    query1.parambyname('keyfield1').asstring := keydata1;

    query1.parambyname('keyfield2').asstring := keydata2;

    query1.open;

    if query1.recordcount = 0 then sub_insert

    else sub_update;



    ........



    sub_insert 와 sub_update 는 따로 만들어 주는게...



    만약 locate 문을 사용하고 싶으시다면 위의 경우처럼 keyfield 가 두개 이상이 되면



    Query1.Locate('필드명1;필드명2', VarArrayOf([찾아갈자료1,찾아갈자료2]), 옵션);



    예) Query1.Locate('code;Name', VarArrayOf([2200, '홍길동']), []);



    이렇게 쓰셔도 되구여...