SQLite i Delphi

0

Witam, jak utworzyć bazę danych w SQLite (Delphi) wraz z rekordami o typach danych Autoincrement. Mam taki przykład

//tworzenie bazy
SQLiteDB:= TSQLiteDatabase.Create(PATH+'database.dat');
SQLiteDB.ExecSQL('CREATE TABLE baza (id INTEGER PRIMARY KEY, nr <??????>, nazwa VARCHAR)');

//dodawanie rekordu
Q:='INSERT INTO baza VALUES(null, <???????> , '''+Edit2.Text+''')';
SQLiteDB.ExecSQL(Q);

Próbowałem juz z AUTO_INCREMENT, INTEGER AUTO_INCREMENT, proszę o pomoc :(

0

CREATE TABLE baza(id integer not null primary key, ......

jeśli Ci chodzi o to, bo nie wiem co ma znaczyć w poście <???????>

ew. rozwiń to pytanie, bo ja się gdzieś pogubiłem ;( bo tu będziesz miał pole id zwiększające się za każdym razem o 1

0

Sory nie dopisałem, <????????> - onacza co mam własnie tam wpisac aby pola były uzupełniane automatycznie

0

A dlaczego w takim razie nie może być:

CREATE TABLE baza(numer integer not null primary key,nazwa VARCHAR)

Q:='INSERT INTO baza (nazwa) VALUES("nowa_nazwa")';

poza tym zawsze jeszcze masz triggers... BTW: może się mylę, ale w tabeli chyba nie można mieć dwóch pól typu autoincrement - a takim byłby i id i numer... Więc tak jak jest powyżej albo trigger... chyba ;)

0

Myślałme że jest możliwośc posiadania dwóch rekordów autoincrement :( trudno bedzie trzeba wykompinowac cos innego

0

a przepraszam za pytanie? po co ci dwa pola w tabeli o zwiększającej się o 1 wartości - przecież tak czy tak są sobie równe. Może napisz co chcesz tym osiągnąć...

0

Pozwolę sobie odświeżyć temat, gdyż nie polecam wykonywania takiego kodu.
Tworzenie pola ID za pomocą:

ID INTEGER PRIMARY KEY

jest złe z tego powodu, że nowe numery dopisywane są na zasadzie:

insert into tabela(ID)
select max(ID)+1 from tabela

Co oznacza to w praktyce?
Już tłumaczę.
Załóżmy, że mamy dwa rekordy:

ID     |     dane
----------------------
1      |    jakieś dane
2      |    inne dane

Następnie usuwamy ostatni rekord:

delete from tabela where ID = 2

A następnie dodajemy nowy:

insert into tabela(dane) values('Najnowsze dane')

Rezultatem będzie:

ID     |     dane
----------------------
1      |    jakieś dane
2      |    Najnowsze dane

Zwróć uwagę na ID tego rekordu :)
Oczywiście chyba nie muszę tłumaczyć dlaczego jest to działanie niepożądane.

Żeby tego uniknąć jest słowo kluczowe AUTOINCREMENT. Nie pamiętam, czy od zawsze, czy od którejś wersji, czyli tworząc tabelę:

CREATE table tabela(
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    dane varchar(200)
)

BTW, nie to forum ;)

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