Indeksowanie w bazie danych

0

Witam!

Jak zrobić Liczbę Porządkową w bazie danych?
Robię, że przy każdym dodawaniu rekordu umieszcza odpowiednią liczbę w kolumnie LP, ale mam problem przy usuwaniu.
Otóż jeżeli usuwamy rekord np. z środka listy no to trzeba zmniejszyć wszystkie następne liczby w kolumnie LP. No i mam kod:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: integer;
begin
  Table.Delete;

  for i:=Table.RecNo to Table.RecordCount do
  begin
    Table.Edit;
    Table.FieldByName('LP').AsInteger:= Table.FieldByName('LP').AsInteger-1;
    Table.Post;
    Table.Next;
  end;
end;

Tylko, że przy 10 000 recordów to trochę zajmuje i w dodatku bez sensu się przesuwa lista. Jak zrobić to jakoś niewidocznie?

0

Poczytaj najpierw : http://webhosting.pl/Klucze.i.indeksy.w.bazie.danych - to się odnosi do wszystkich baz danych

tworząc tabelę (tu z poziomu kodu sql)

CREATE TABLE `user`
(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(100) NOT NULL,
 PRIMARY KEY (`id`);
)

powodujesz, że pole id jest unikalne i przy dodaniu nowego rekordu do tabeli jego wartość za każdym razem sama zwiększa się o jeden.
Nie ma sensu martwić się tym, że jeśli usuwasz rekord "powstaje dziura" - takie pole ma przede wszystkim służyć możliwości identyfikacji rekordu (czyli przede wszystkim mieć unikalną wartość)

Jakiej bazy używasz? Jak ją tworzysz?

0

Paradox, można dać typ pola ftAutoInc - samo się zwiększa, ale dziura zostaje po usunięciu rekordu.

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Session.IsAlias('MojaBaza') = false then
    Session.AddStandardAlias('MojaBaza', ExtractFilePath(Application.ExeName), '');
  Table.DatabaseName:= 'MojaBaza';
  Table.TableName:= 'Tabela';

  if not Table.Exists then
  begin
    with Table.FieldDefs do
    begin
      with AddFieldDef do
      begin
        Name:= 'LP';
        DataType:= ftInteger;
        Required:= true;
      end;

      with AddFieldDef do
      begin
        Name:= 'Imię';
        DataType:= ftString;
        Required:= true;
      end;

      with AddFieldDef do
      begin
        Name:= 'Nazwisko';
        DataType:= ftString;
        Required:= true;
      end;

      with AddFieldDef do
      begin
        Name:= 'Zdjecie';
        DataType:= ftGraphic;
        //Required:= true;
      end;
    end;
    Table.CreateTable;
  end;

  Table.Active:=true;
  Lista.Columns[3].Visible:= false;
end; 
1

kolumny LP są to kolumny wyliczane. Koniec i kropka. Wszelkie rozwiązania opierające się o kolumnę LP będącą fizycznie w tabeli nie ma prawa działać

0

Jakaś podpowiedź? Bo http://www.google.pl/search?q=delphi+kolumna+wyliczana niewiele mówi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1