-------------------------------------------------
> 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; // 입력 수정 삭제시 사용하는 명령어
> -------------------------------------------------
> > 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 김경식