Q&A

  • 테이블에서 중복테이터 알아내기
디비에디트박스에서, 번호를 입력받아

테이블에 저장을 하려합니다.

만약, 테이블에 같은 번호가 있는지(중복여부)를

알아내려면 어떻게 해야하는지?

만약, 2번을 입력하면, 테이블에 2번이

존재하기때문에, 에러메세지를 내려고

합니다. 다음처럼 했는데, 무조건, 메세지

박스를 내어보내네요. 어떻게 해야 할지!!!

인덱스 키는 없고, 쿼리는 사용할 수 없는 형편입니다.

이를 감안하여 좋은 의견 좀 주시면........



i:=StrToInt(DbEdit1.Text); //번호입력

Table1.First;

Repeat

if (i=Table1.FieldByName('번호').AsInteger) then

begin

MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

DbEdit1.Clear;

DbEdit1.SetFocus;

Exit;

end;

Until Table1.EOF;



3  COMMENTS
  • Profile
    정성훈 2000.11.10 02:58
    초보 wrote:

    > 디비에디트박스에서, 번호를 입력받아

    > 테이블에 저장을 하려합니다.

    > 만약, 테이블에 같은 번호가 있는지(중복여부)를

    > 알아내려면 어떻게 해야하는지?

    > 만약, 2번을 입력하면, 테이블에 2번이

    > 존재하기때문에, 에러메세지를 내려고

    > 합니다. 다음처럼 했는데, 무조건, 메세지

    > 박스를 내어보내네요. 어떻게 해야 할지!!!

    > 인덱스 키는 없고, 쿼리는 사용할 수 없는 형편입니다.

    > 이를 감안하여 좋은 의견 좀 주시면........

    >

    > i:=StrToInt(DbEdit1.Text); //번호입력

    > Table1.First;

    > Repeat

    > if (i=Table1.FieldByName('번호').AsInteger) then

    > begin

    > MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

    > DbEdit1.Clear;

    > DbEdit1.SetFocus;

    > Exit;

    > end;

    > Until Table1.EOF;

    >





    안녕하세요.

    음 전 주로 쿼리를 사용하기 때문에..혹시나 해서 적어봅니다.

    밑에 님이 locate 사용하면 된다고 하셧는데..그거 적을께요..



    with Query1 do

    begin

    While not EOF do

    if Query1.Locate( '번호', dbEdit1.Text, [LocaseInsenSitive] ) = True then

    begin

    ShowMessage( '중복' );

    DbEdit1.Clear;

    DbEdit1.SetFocus;

    end;

    end;

    end;



    > i:=StrToInt(DbEdit1.Text); //번호입력

    > Table1.First;

    > Repeat

    > if (i=Table1.FieldByName('번호').AsInteger) then

    > begin

    > MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

    > DbEdit1.Clear;

    > DbEdit1.SetFocus;

    > Exit;

    > end;

    > Until Table1.EOF;

    >



  • Profile
    cell 2000.11.09 23:46
    초보 wrote:

    > 디비에디트박스에서, 번호를 입력받아

    > 테이블에 저장을 하려합니다.

    > 만약, 테이블에 같은 번호가 있는지(중복여부)를

    > 알아내려면 어떻게 해야하는지?

    > 만약, 2번을 입력하면, 테이블에 2번이

    > 존재하기때문에, 에러메세지를 내려고

    > 합니다. 다음처럼 했는데, 무조건, 메세지

    > 박스를 내어보내네요. 어떻게 해야 할지!!!

    > 인덱스 키는 없고, 쿼리는 사용할 수 없는 형편입니다.

    > 이를 감안하여 좋은 의견 좀 주시면........

    >

    > i:=StrToInt(DbEdit1.Text); //번호입력

    > Table1.First;

    > Repeat

    > if (i=Table1.FieldByName('번호').AsInteger) then

    > begin

    > MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

    > DbEdit1.Clear;

    > DbEdit1.SetFocus;

    > Exit;

    > end;

    > Until Table1.EOF;

    >

    위의 코딩은 다음 레코드로 이동하는 명령어가 없기 때문에

    첫번째가 같은 번호가 있으면 끝까지 메시지가 출력되지요.



    위의 문장같은 형식으로 하자면..

    i:=StrToInt(DbEdit1.Text); //번호입력

    With Table1 Do Begin

    First;

    While Not Eof Do Begin

    if (i=Table1.FieldByName('번호').AsInteger) then

    begin

    MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

    DbEdit1.Clear;

    DbEdit1.SetFocus;

    Exit;

    end;

    Next;

    end;

    end;



    위와 같이 하면 되지 않을듯 싶은데요.



  • Profile
    임형호 2000.11.09 21:35
    중복데이터를 방지할려면 프라이머리키로 설정하시는 방법이 있구요. 자동증가필드로 설정을 하시는방법도 있습니다. 이도 저도 할수 없을때에는 물론 해당 필드에 입력할려는 번호가 존재하는지를 검색해야할겁니다.

    findkey가 있긴한데..... 잠깐만 인덱스를 줄 수 없다고 하셨죠?

    그러면 locate라는 명령어가 있습니다. 인덱스가 없어도 찾을수 있죠.

    사용법은 F1을 눌러보세요. 아님..책을 참조하시든지요. 할일이 있어서 일일이 적어드릴수가 없네요. 그럼 즐프하세요. 이만.







    초보 wrote:

    > 디비에디트박스에서, 번호를 입력받아

    > 테이블에 저장을 하려합니다.

    > 만약, 테이블에 같은 번호가 있는지(중복여부)를

    > 알아내려면 어떻게 해야하는지?

    > 만약, 2번을 입력하면, 테이블에 2번이

    > 존재하기때문에, 에러메세지를 내려고

    > 합니다. 다음처럼 했는데, 무조건, 메세지

    > 박스를 내어보내네요. 어떻게 해야 할지!!!

    > 인덱스 키는 없고, 쿼리는 사용할 수 없는 형편입니다.

    > 이를 감안하여 좋은 의견 좀 주시면........

    >

    > i:=StrToInt(DbEdit1.Text); //번호입력

    > Table1.First;

    > Repeat

    > if (i=Table1.FieldByName('번호').AsInteger) then

    > begin

    > MessageDlg('중복된 번호입니다. 다시 입력하세요.',mtWarning,[mbok],0);

    > DbEdit1.Clear;

    > DbEdit1.SetFocus;

    > Exit;

    > end;

    > Until Table1.EOF;

    >