Q&A

  • dbgrid 입력할대 또 에러가 나네요 흑
-------------------------------------------------

> nnum long integer

> group a 10

> name a 12

> tel a 20

> hp a 20

> --------------------------------------------------

> nnum을 pk로 잡았구요

걍 숫자형으로 바꿨는데두 증가가 안되네요

값을 넣어보면 nnum이 1,2까지 밖에 안들어가고 에러가 납니다

그담은 키 에러가 나구요



밑에 방법도 써봤지만 그래도 에러가 --;

좀 도와주세요 이것땜에 벌써 며칠짼지 흑흑



Close;

SQL.Clear;

SQL.Add('Insert InTo tel_no values');

SQL.Add('(:nnum0 ,:group0,:name0,:tel0,:hp0) ');

ParamByName('nnum0').Asinteger :=1 + dm.tbl_tel.fieldbyname('nnum').asinteger;

ParamByName('group0').AsString := st;

ParamByName('name0').AsString := name1.Text;

ParamByName('tel0').AsString := tel1.Text;

ParamByName('hp0').AsString := hp1.Text;

ExecSQL; // 입력 수정 삭제시 사용하는 명령어

2  COMMENTS
  • Profile
    김경식 2000.04.01 01:56
    정연 wrote:

    > -------------------------------------------------

    > > nnum long integer

    > > group a 10

    > > name a 12

    > > tel a 20

    > > hp a 20

    > > --------------------------------------------------

    > > nnum을 pk로 잡았구요

    > 걍 숫자형으로 바꿨는데두 증가가 안되네요

    > 값을 넣어보면 nnum이 1,2까지 밖에 안들어가고 에러가 납니다

    > 그담은 키 에러가 나구요

    >

    > 밑에 방법도 써봤지만 그래도 에러가 --;

    > 좀 도와주세요 이것땜에 벌써 며칠짼지 흑흑

    >

    > Close;

    > SQL.Clear;

    > SQL.Add('Insert InTo tel_no values');

    > SQL.Add('(:nnum0 ,:group0,:name0,:tel0,:hp0) ');

    > ParamByName('nnum0').Asinteger :=1 + dm.tbl_tel.fieldbyname('nnum').asinteger;

    > ParamByName('group0').AsString := st;

    > ParamByName('name0').AsString := name1.Text;

    > ParamByName('tel0').AsString := tel1.Text;

    > ParamByName('hp0').AsString := hp1.Text;

    > ExecSQL; // 입력 수정 삭제시 사용하는 명령어



    위의 dm.tbl_tel.fieldbyname('nnum').asinteger 부분은 항상 값으로 1을 돌려줍니다.

    그래서 2가 한번 입력되고 나면 다음에는 Key Viollation이 일어나는 것입니다.

    이런 코드는 어떨까요?



    procedure TForm1.Button1Click(Sender: TObject);

    var

    max : Integer;

    begin

    with Query1 do begin

    Close;

    SQL.Clear;

    SQL.Add('select max(nnum) from tel_no'); // nnum의 가장 큰 값을 구해서...

    Open;

    // 변수에 입력합니다.

    max := FieldByName('max of nnum').AsInteger; // Paradox에서는 이렇게 쓰죠?



    Close;

    SQL.Clear;

    SQL.Add('Insert InTo tel_no values');

    SQL.Add('(:nnum0 ,:group0,:name0,:tel0,:hp0)');

    ParamByName('nnum0').Asinteger := max + 1; // 가장큰값+1

    ParamByName('group0').AsString := edit2.Text;

    ParamByName('name0').AsString := edit3.Text;

    ParamByName('tel0').AsString := edit4.Text;

    ParamByName('hp0').AsString := edit5.Text;

    ExecSQL;

    end;

    Table1.Refresh;

    end;



    도움이 되셨길... 정연씨...

    from 김경식

  • Profile
    젠키 2000.04.01 01:26
    정연 wrote:

    > -------------------------------------------------

    > > nnum long integer

    > > group a 10

    > > name a 12

    > > tel a 20

    > > hp a 20

    > > --------------------------------------------------

    > > nnum을 pk로 잡았구요

    > 걍 숫자형으로 바꿨는데두 증가가 안되네요

    > 값을 넣어보면 nnum이 1,2까지 밖에 안들어가고 에러가 납니다

    > 그담은 키 에러가 나구요

    >

    > 밑에 방법도 써봤지만 그래도 에러가 --;

    > 좀 도와주세요 이것땜에 벌써 며칠짼지 흑흑

    >

    > Close;

    > SQL.Clear;

    > SQL.Add('Insert InTo tel_no values');

    > SQL.Add('(:nnum0 ,:group0,:name0,:tel0,:hp0) ');

    > ParamByName('nnum0').Asinteger :=1 + dm.tbl_tel.fieldbyname('nnum').asinteger;

    > ParamByName('group0').AsString := st;

    > ParamByName('name0').AsString := name1.Text;

    > ParamByName('tel0').AsString := tel1.Text;

    > ParamByName('hp0').AsString := hp1.Text;

    > ExecSQL; // 입력 수정 삭제시 사용하는 명령어





    ParamByName('nnum0').Asinteger := 1 + dm.tbl_tel.fieldbyname('nnum').asinteger

    는 key값입니다. 그런데 key중에(1 + dm.tbl_tel.fieldbyname('nnum').asinteger)

    값이 있으면 발생합니다.