Seite 1 von 1

Sqlite 3.08

Verfasst: 28. Januar 2005 15:32
von NoobSaibot
Ich weiss, es super ot, aber ich binde sqlite in meine qt anwendung ein und habe diesbezüglich eine frage.

folgende struktur sollte die tabelle "eintrag" haben:
CREATE TABLE eintrag (
id INTEGER,
parent_id INTEGER,
name TEXT,
PRIMARY KEY(parent_id, name)
);
Das Problem hierbei ist, dass "id" nicht inkrementiert wird (bei jedem INSERT ist es NULL), weil nur PRIMARY KEY Elemente AUTOINCREMENT gesetzt werden können. Eine SEQUENCE gibt es bei Sqlite auch nicht.

Hat einer von euch da eine Lösung.

Verfasst: 28. Januar 2005 16:41
von NoobSaibot
Also eine Idee habe ich:

Tabelle A enthält id -> Einen Trigger auf INSERT der Tabelle A anlegen, das einen INSERT in eine Tabelle B auslöst -> Tabelle B enthällt ebenfalls id, jedoch ist es ein PRIMARY KEY und deshalb wird es inkrementiert -> Einen Trigger auf INSERT der Tabelle B anlegen, das einen UPDATE der Tabelle A auslöst und die id der Tabelle A auf den neuen Wert von id der Tabelle B setzt.

Hoffe meine Ausführung ist verständlich. Ausserdem hoffe ich, dass es einen einfacheren Weg gibt :roll:

Verfasst: 30. Januar 2005 19:17
von FlorianBecker
Qt4 hat sqlite3 Treiber

Verfasst: 30. Januar 2005 22:33
von NoobSaibot
hehe ... oooookeeey. die frage ging mehr in die richtung "wie kriege ich das mit sql geregelt", aber trotzdem danke für die antwort :)

übrigens habe ich den treiber schon gesehen. ich verwende die datenbank eigentlich intern, d.h. ich kompiliere die datenbank in meine anwendung mit ein. von daher weiss ich nicht ob der qt treiber mir überhaupt irgendwas nützt.

aber jetzt mal zur lösung. hab da was einfacheres.

Code: Alles auswählen

CREATE TABLE entry (
    id INTEGER PRIMARY KEY,
    parent_id INTEGER,
    name TEXT);

CREATE UNIQUE INDEX entry_index ON entry(parent_id, name);
so haben wir die "id", die automatisch, bei jedem INSERT, um eins erhöht wird _und_ einen quasi PRIMARY KEY der aus "parent_id" und "name" besteht.

Verfasst: 3. März 2005 14:57
von nando
Hi,

ich glaube du liegst da etwas falsch.
soweit ich weiss erzeugst du mit create index nur einen index auf die tabelle... sprich die tabelle wird nach den zwei attributen id und primary id indiziert. das dient lediglich dem schnelleren zugriff auf die tabelle ueber die zwei attribute. (die den wirklichen primary bilden sollten).



Gruss,
Marco

Verfasst: 3. März 2005 15:00
von nando
Hi,

ich glaube du liegst da etwas falsch.
soweit ich weiss erzeugst du mit create index nur einen index auf die tabelle... sprich die tabelle wird nach den zwei attributen id und primary id indiziert. das dient lediglich dem schnelleren zugriff auf die tabelle ueber die zwei attribute. (die den wirklichen primary bilden sollten).



Gruss,
Marco

Verfasst: 9. März 2005 20:40
von NoobSaibot
ich weiss schon wofür der index ist, aber den tipp habe ich von den db jungs in der sqlite mailingliste bekommen. Und es scheint zu funktionieren, was wohl die Hauptsache ist :)