Q&A

  • 기본키 값 자동으로 증가하는 것좀 알려주세요
테이블을 만들었거든여... 고객이라는.......
아차.. 테이블명 한글로 해도 상관없죠? 파라독스 db거든여
고객이라는 테이블에 고객번호라는 필드를 만들고,
고객번호를 주키로 잡았거든여....
고객번호를 자동증가로 잡아주니까...
3번까지 데이터를 입력한후에 2번을 지우고 나서
삽입을 하면 2번이 안들어오고 4번으로 자동으로 잡히거든여...
글구 3번을 지우고 삽입을 하면 3번이 나와야되는데
4번이 나와여...

해결 방법좀 알켜주세요 초보거든여...
오름차순으로 고객번호 들어가게 하는 것 좀 알려주세요...
지워진 레코드는 못쓰는건가여???

글럼 즐거운 하루 되세요
1  COMMENTS
  • Profile
    배창섭 2002.05.13 22:17
    AutoIncrement 필드를 주키로 쓰시면 그런 문제가 발생하게 마련이죠.
    이 필드의 특징이 오직 증가만 하기 때문에 삽입을 하더라도 증가된 숫자가 들어간답니다.
    고객이 삭제 된 후에 그 번호에 다른 고객을 삽입하려면 고객번호 필드를 일반적인 Numeric Type으로 잡고 코딩으로 입력하는 수 밖에 없을 것 같군요. 결국 원하시는 것은 물리적인 레코드 번호가 고객번호가 되기를 원하시는 것이라고 생각되네요.
    즉,

    고개번호    이름
        1           김개똥
        2           김소똥
        3           김말똥

    이와 같은 상태에서

        2           김소똥

    을 삭제하면 현재의 레코드는 [3   김말똥]이 되죠. 이 위치에서 다른 레코드를 삽입할 경우 (삽입은 현재 레코드의 앞에 되므로) 아래처럼 고객번호가 2번이 나와야 된다는 말씀이니까

    고개번호    이름
        1           김개똥
    -> 2           김쥐똥
        3           김말똥

        
    unit Unit1;

    interface

    uses
      Windows, Messages, Classes, SysUtils, Graphics, Controls, StdCtrls, Forms,
      Dialogs, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls;

    type
      TForm1 = class(TForm)
        Table1No: TFloatField;
        Table1Name: TStringField;
        DBGrid1: TDBGrid;
        DBNavigator: TDBNavigator;
        Panel1: TPanel;
        DataSource1: TDataSource;
        Panel2: TPanel;
        Table1: TTable;
        procedure FormCreate(Sender: TObject);
        procedure Table1BeforeInsert(DataSet: TDataSet);
        procedure Table1AfterInsert(DataSet: TDataSet);
      private
        { private declarations }
      public
        { public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.DFM}
    var
      GogakNo : LongInt;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Table1.Open;
    end;

    procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
    begin
      GogakNo := DataSet['No'] - 1;
    end;

    procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
    begin
      DataSet['No'] := GogakNo;
    end;

    end.

    이렇게 하시면 되는데요. 그런데 이 경우 문제는 번호가 삭제되지 않은 경우에도 삽입을 하면 중복된 키 값이 생성되거든요. 이것은 어떻게 하실런지....
    시간이 없어서 더 고민은 못하겠네요.
    죄송....