Sqlite 3.08

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Sqlite 3.08

Beitrag 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.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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:
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Qt4 hat sqlite3 Treiber
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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.
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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 :)
Antworten