Q&A

  • 쿼리에서 데이타베이스에 중복을 없앨려구...
성적처러프로그램을 짜구 있는데...학번필들와 이름필드의 중복을 없앨려구 하거든여...

이미 입력은 파라바이네임을 써서 하구 있는데..중복을 하면 무결성 원칙의 에러라구

하거든여...

어떻게 방법이 없나여?

소스는 아래와 같습니다...



procedure TForm3.btnSaveClick(Sender: TObject);

var

i : integer;

a,b,c,d,e,f,g : string;



begin

a:=Edit1.text;

b:=Edit2.text;

c:=Edit3.text;

d:=Edit4.text;

e:=Edit5.text;

f:=Edit6.text;

g:=Edit7.text;









if (strtoint(c)<1) or (strtoint(c)>100) then

begin

showmessage('올바르지 않는 점수 입니다.');

edit3.clear;

edit3.setfocus;

exit;

end;

if (strtoint(d)<1) or (strtoint(d)>100) then

begin

showmessage('올바르지 않는 점수 입니다.');

edit4.clear;

edit4.setfocus;

exit;

end;

if (strtoint(e)<1) or (strtoint(e)>100) then

begin

showmessage('올바르지 않는 점수 입니다.');

edit5.clear;

edit5.setfocus;

exit;

end;

if (strtoint(f)<1) or (strtoint(f)>100) then

begin

showmessage('올바르지 않는 점수 입니다.');

edit6.clear;

edit6.setfocus;

exit;

end;

if (strtoint(g)<1) or (strtoint(g)>100) then

begin

showmessage('올바르지 않는 점수 입니다.');

edit7.clear;

edit7.setfocus;

exit;

end;



with Query1 do begin

Close;

Sql.Text := 'insert into Total (NUM,NAME,DAT,UNIX,DEL,JAVA,C)';

Sql.Text := Sql.Text + ' values (:NUM, :NAME, :DAT, :UNIX, :DEL, :JAVA, :C) ';

Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

Parambyname('NAME').AsString:=Edit2.Text;

Parambyname('DAT').asinteger :=strtointdef(Edit3.Text,0);

Parambyname('UNIX').asinteger :=strtointdef(Edit4.Text,0);

Parambyname('DEL').asinteger :=strtointdef(Edit5.Text,0);

Parambyname('JAVA').asinteger :=strtointdef(Edit6.Text,0);

Parambyname('C').asinteger :=strtointdef(Edit7.Text,0);

ExecSQL;

end;

with Query2 do begin

Close;

Open;

end;

edit1.Clear;

edit2.Clear;

edit3.Clear;

edit4.Clear;

edit5.Clear;

edit6.Clear;

edit7.Clear;



end;

4  COMMENTS
  • Profile
    사발우성 2001.01.18 23:47
    왕처버 사발임당...

    님께서 원하는건 아마두 중복입력을 막을라구 하는거 같은디 그건가여 ^^;;

    간단하게 할수 있을거 같네여 ^^;;

    음 구라니까 insert전에

    sql.text := 'select * from total where num= :num and name = :name ';

    Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    Parambyname('NAME').AsString:=Edit2.Text;

    open;

    if not eof then

    begin

    showmessage('^^ 등록되어있다네...');

    exit;

    end;

    이렇게 하면 끝 ^^;;

    구람 즐프여...^^;;

    피에수: 아래 try ... except 예외처리 추가 했습니당..^^;;

    델파이초보 wrote:

    > 성적처러프로그램을 짜구 있는데...학번필들와 이름필드의 중복을 없앨려구 하거든여...

    > 이미 입력은 파라바이네임을 써서 하구 있는데..중복을 하면 무결성 원칙의 에러라구

    > 하거든여...

    > 어떻게 방법이 없나여?

    > 소스는 아래와 같습니다...

    >

    > procedure TForm3.btnSaveClick(Sender: TObject);

    > var

    > i : integer;

    > a,b,c,d,e,f,g : string;

    >

    > begin

    > a:=Edit1.text;

    > b:=Edit2.text;

    > c:=Edit3.text;

    > d:=Edit4.text;

    > e:=Edit5.text;

    > f:=Edit6.text;

    > g:=Edit7.text;

    >

    >

    >

    >

    > if (strtoint(c)<1) or (strtoint(c)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit3.clear;

    > edit3.setfocus;

    > exit;

    > end;

    > if (strtoint(d)<1) or (strtoint(d)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit4.clear;

    > edit4.setfocus;

    > exit;

    > end;

    > if (strtoint(e)<1) or (strtoint(e)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit5.clear;

    > edit5.setfocus;

    > exit;

    > end;

    > if (strtoint(f)<1) or (strtoint(f)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit6.clear;

    > edit6.setfocus;

    > exit;

    > end;

    > if (strtoint(g)<1) or (strtoint(g)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit7.clear;

    > edit7.setfocus;

    > exit;

    > end;

    >

    > with Query1 do begin

    > Close;

    > Sql.Text := 'insert into Total (NUM,NAME,DAT,UNIX,DEL,JAVA,C)';

    > Sql.Text := Sql.Text + ' values (:NUM, :NAME, :DAT, :UNIX, :DEL, :JAVA, :C) ';

    > Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    > Parambyname('NAME').AsString:=Edit2.Text;

    > Parambyname('DAT').asinteger :=strtointdef(Edit3.Text,0);

    > Parambyname('UNIX').asinteger :=strtointdef(Edit4.Text,0);

    > Parambyname('DEL').asinteger :=strtointdef(Edit5.Text,0);

    > Parambyname('JAVA').asinteger :=strtointdef(Edit6.Text,0);

    > Parambyname('C').asinteger :=strtointdef(Edit7.Text,0);

    try

    ExecSQL;

    except

    showmessage('error');

    end;



    > end;

    > with Query2 do begin

    > Close;

    > Open;

    > end;

    > edit1.Clear;

    > edit2.Clear;

    > edit3.Clear;

    > edit4.Clear;

    > edit5.Clear;

    > edit6.Clear;

    > edit7.Clear;

    >

    > end;

  • Profile
    델파이초보 2001.01.18 22:41
    감사합니다...

    그런데...

    SHOWMESSAGE 는 나오지 안는데여...

    참..어찌됐든...감사합니다..

    그것은 제가 처리하겠습니다.



    사발우성 wrote:

    > 왕처버 사발임당...

    > 님께서 원하는건 아마두 중복입력을 막을라구 하는거 같은디 그건가여 ^^;;

    > 간단하게 할수 있을거 같네여 ^^;;

    > 음 구라니까 insert전에

    > sql.text := 'select * from total where num= :num and name = :name ';

    > Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    > Parambyname('NAME').AsString:=Edit2.Text;

    > if not eof then

    > begin

    > showmessage('^^ 등록되었있다네...');

    > exit;

    > end;

    > 이렇게 하면 끝 ^^;;

    > 구람 즐프여...^^;;

    > 피에수: 아래 try ... except 예외처리 추가 했습니당..^^;;

    > 델파이초보 wrote:

    > > 성적처러프로그램을 짜구 있는데...학번필들와 이름필드의 중복을 없앨려구 하거든여...

    > > 이미 입력은 파라바이네임을 써서 하구 있는데..중복을 하면 무결성 원칙의 에러라구

    > > 하거든여...

    > > 어떻게 방법이 없나여?

    > > 소스는 아래와 같습니다...

    > >

    > > procedure TForm3.btnSaveClick(Sender: TObject);

    > > var

    > > i : integer;

    > > a,b,c,d,e,f,g : string;

    > >

    > > begin

    > > a:=Edit1.text;

    > > b:=Edit2.text;

    > > c:=Edit3.text;

    > > d:=Edit4.text;

    > > e:=Edit5.text;

    > > f:=Edit6.text;

    > > g:=Edit7.text;

    > >

    > >

    > >

    > >

    > > if (strtoint(c)<1) or (strtoint(c)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit3.clear;

    > > edit3.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(d)<1) or (strtoint(d)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit4.clear;

    > > edit4.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(e)<1) or (strtoint(e)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit5.clear;

    > > edit5.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(f)<1) or (strtoint(f)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit6.clear;

    > > edit6.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(g)<1) or (strtoint(g)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit7.clear;

    > > edit7.setfocus;

    > > exit;

    > > end;

    > >

    > > with Query1 do begin

    > > Close;

    > > Sql.Text := 'insert into Total (NUM,NAME,DAT,UNIX,DEL,JAVA,C)';

    > > Sql.Text := Sql.Text + ' values (:NUM, :NAME, :DAT, :UNIX, :DEL, :JAVA, :C) ';

    > > Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    > > Parambyname('NAME').AsString:=Edit2.Text;

    > > Parambyname('DAT').asinteger :=strtointdef(Edit3.Text,0);

    > > Parambyname('UNIX').asinteger :=strtointdef(Edit4.Text,0);

    > > Parambyname('DEL').asinteger :=strtointdef(Edit5.Text,0);

    > > Parambyname('JAVA').asinteger :=strtointdef(Edit6.Text,0);

    > > Parambyname('C').asinteger :=strtointdef(Edit7.Text,0);

    > try

    > ExecSQL;

    > except

    > showmessage('error');

    > end;

    >

    > > end;

    > > with Query2 do begin

    > > Close;

    > > Open;

    > > end;

    > > edit1.Clear;

    > > edit2.Clear;

    > > edit3.Clear;

    > > edit4.Clear;

    > > edit5.Clear;

    > > edit6.Clear;

    > > edit7.Clear;

    > >

    > > end;

  • Profile
    조덕진 2001.01.18 20:56
    안녕하세요. 델초보 조덕진입니다.

    예외처리를 하시면 될 것 같네요.

    검색에서 "에외처리"로 찾으시면 많은 답변이 있습니다. 저도 이곳에서 예외처리에 관한 도움을 많이 받았죠.

    간단히 설명을 드리면

    try

    Insert를 하기 위한 쿼리문

    exeption

    Insert시 에라가 발생했을 때의 처리

    end;



    부족한 답변이라 죄송하네요. 검색에서 꼭 찾아보세요.



    그럼.. 즐프되세요..





    델파이초보 wrote:

    > 성적처러프로그램을 짜구 있는데...학번필들와 이름필드의 중복을 없앨려구 하거든여...

    > 이미 입력은 파라바이네임을 써서 하구 있는데..중복을 하면 무결성 원칙의 에러라구

    > 하거든여...

    > 어떻게 방법이 없나여?

    > 소스는 아래와 같습니다...

    >

    > procedure TForm3.btnSaveClick(Sender: TObject);

    > var

    > i : integer;

    > a,b,c,d,e,f,g : string;

    >

    > begin

    > a:=Edit1.text;

    > b:=Edit2.text;

    > c:=Edit3.text;

    > d:=Edit4.text;

    > e:=Edit5.text;

    > f:=Edit6.text;

    > g:=Edit7.text;

    >

    >

    >

    >

    > if (strtoint(c)<1) or (strtoint(c)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit3.clear;

    > edit3.setfocus;

    > exit;

    > end;

    > if (strtoint(d)<1) or (strtoint(d)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit4.clear;

    > edit4.setfocus;

    > exit;

    > end;

    > if (strtoint(e)<1) or (strtoint(e)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit5.clear;

    > edit5.setfocus;

    > exit;

    > end;

    > if (strtoint(f)<1) or (strtoint(f)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit6.clear;

    > edit6.setfocus;

    > exit;

    > end;

    > if (strtoint(g)<1) or (strtoint(g)>100) then

    > begin

    > showmessage('올바르지 않는 점수 입니다.');

    > edit7.clear;

    > edit7.setfocus;

    > exit;

    > end;

    >

    > with Query1 do begin

    > Close;

    > Sql.Text := 'insert into Total (NUM,NAME,DAT,UNIX,DEL,JAVA,C)';

    > Sql.Text := Sql.Text + ' values (:NUM, :NAME, :DAT, :UNIX, :DEL, :JAVA, :C) ';

    > Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    > Parambyname('NAME').AsString:=Edit2.Text;

    > Parambyname('DAT').asinteger :=strtointdef(Edit3.Text,0);

    > Parambyname('UNIX').asinteger :=strtointdef(Edit4.Text,0);

    > Parambyname('DEL').asinteger :=strtointdef(Edit5.Text,0);

    > Parambyname('JAVA').asinteger :=strtointdef(Edit6.Text,0);

    > Parambyname('C').asinteger :=strtointdef(Edit7.Text,0);

    > ExecSQL;

    > end;

    > with Query2 do begin

    > Close;

    > Open;

    > end;

    > edit1.Clear;

    > edit2.Clear;

    > edit3.Clear;

    > edit4.Clear;

    > edit5.Clear;

    > edit6.Clear;

    > edit7.Clear;

    >

    > end;

  • Profile
    델파이초보 2001.01.18 21:16
    지송하지만...거기가 봐두 잘 ...모르게습니다..

    확실한 답변을...









    조덕진 wrote:

    > 안녕하세요. 델초보 조덕진입니다.

    > 예외처리를 하시면 될 것 같네요.

    > 검색에서 "에외처리"로 찾으시면 많은 답변이 있습니다. 저도 이곳에서 예외처리에 관한 도움을 많이 받았죠.

    > 간단히 설명을 드리면

    > try

    > Insert를 하기 위한 쿼리문

    > exeption

    > Insert시 에라가 발생했을 때의 처리

    > end;

    >

    > 부족한 답변이라 죄송하네요. 검색에서 꼭 찾아보세요.

    >

    > 그럼.. 즐프되세요..

    >

    >

    > 델파이초보 wrote:

    > > 성적처러프로그램을 짜구 있는데...학번필들와 이름필드의 중복을 없앨려구 하거든여...

    > > 이미 입력은 파라바이네임을 써서 하구 있는데..중복을 하면 무결성 원칙의 에러라구

    > > 하거든여...

    > > 어떻게 방법이 없나여?

    > > 소스는 아래와 같습니다...

    > >

    > > procedure TForm3.btnSaveClick(Sender: TObject);

    > > var

    > > i : integer;

    > > a,b,c,d,e,f,g : string;

    > >

    > > begin

    > > a:=Edit1.text;

    > > b:=Edit2.text;

    > > c:=Edit3.text;

    > > d:=Edit4.text;

    > > e:=Edit5.text;

    > > f:=Edit6.text;

    > > g:=Edit7.text;

    > >

    > >

    > >

    > >

    > > if (strtoint(c)<1) or (strtoint(c)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit3.clear;

    > > edit3.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(d)<1) or (strtoint(d)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit4.clear;

    > > edit4.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(e)<1) or (strtoint(e)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit5.clear;

    > > edit5.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(f)<1) or (strtoint(f)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit6.clear;

    > > edit6.setfocus;

    > > exit;

    > > end;

    > > if (strtoint(g)<1) or (strtoint(g)>100) then

    > > begin

    > > showmessage('올바르지 않는 점수 입니다.');

    > > edit7.clear;

    > > edit7.setfocus;

    > > exit;

    > > end;

    > >

    > > with Query1 do begin

    > > Close;

    > > Sql.Text := 'insert into Total (NUM,NAME,DAT,UNIX,DEL,JAVA,C)';

    > > Sql.Text := Sql.Text + ' values (:NUM, :NAME, :DAT, :UNIX, :DEL, :JAVA, :C) ';

    > > Parambyname('NUM').asinteger :=strtointdef(Edit1.Text,0);

    > > Parambyname('NAME').AsString:=Edit2.Text;

    > > Parambyname('DAT').asinteger :=strtointdef(Edit3.Text,0);

    > > Parambyname('UNIX').asinteger :=strtointdef(Edit4.Text,0);

    > > Parambyname('DEL').asinteger :=strtointdef(Edit5.Text,0);

    > > Parambyname('JAVA').asinteger :=strtointdef(Edit6.Text,0);

    > > Parambyname('C').asinteger :=strtointdef(Edit7.Text,0);

    > > ExecSQL;

    > > end;

    > > with Query2 do begin

    > > Close;

    > > Open;

    > > end;

    > > edit1.Clear;

    > > edit2.Clear;

    > > edit3.Clear;

    > > edit4.Clear;

    > > edit5.Clear;

    > > edit6.Clear;

    > > edit7.Clear;

    > >

    > > end;