AUTO_INCREMENT in TSQLQuery ohne Wirkung

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

AUTO_INCREMENT in TSQLQuery ohne Wirkung

Beitrag von ConcAPPtLab »

Hallo Community,

ich mache zurzeit meine ersten vorsichtigen Schritte mit SQL in Verbindung mit Lazarus. Wie sonst auch, hat jede meiner Tabellen eine Spalte ID, welche ganz normal via AUTO_INCREMENT hochgezählt werden soll.

Dies ist mein Code:

Code: Alles auswählen

{ Create property table }
    SQLQuery1.SQL.Text := 'CREATE TABLE IF NOT EXISTS prop (PID int AUTO_INCREMENT PRIMARY KEY, name varchar(255) NOT NULL, val varchar(255) NOT NULL)';
    SQLQuery1.ExecSQL;
    SQLTransaction1.Commit;
 
 { Add test property }
    SQLQuery1.SQL.Text := 'INSERT INTO prop (PID, name, val) VALUES (NULL, "Prop1", "Val1.1")';
    SQLQuery1.ExecSQL;
    SQLTransaction1.Commit;
 


Nun habe ich testweise mehrere Properties in die Tabelle eingespeichert. Allerdings habe ich festgestellt, dass alle Datensätze die PID 0 haben. Es scheint, als würde das AUTO_INCREMENT ohne Wirkung sein. Auch ein Test mit IDENTITY(0, 1) zählt die ID nicht hoch.

Eine Suche im Internet hat nichts ergeben. Wisst ihr, was das Problem ist?

Grüße
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: AUTO_INCREMENT in TSQLQuery ohne Wirkung

Beitrag von Socke »

ConcAPPtLab hat geschrieben:Eine Suche im Internet hat nichts ergeben. Wisst ihr, was das Problem ist?

Deine Datenbank akzeptiert das Schlüsselwort AUTO_INCREMENT, tut aber nichts?
In diesem Fall würde ich in der Dokumentation der Datenbank nachlesen, wie ich ein Auto-Increment-Attribut definieren muss.

Welche Datenbank verwendest du denn?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: AUTO_INCREMENT in TSQLQuery ohne Wirkung

Beitrag von Michl »

Geht es denn so?:

Code: Alles auswählen

    SQLQuery1.SQL.Text := 'INSERT INTO prop (name, val) VALUES ("Prop1", "Val1.1")';

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: AUTO_INCREMENT in TSQLQuery ohne Wirkung

Beitrag von ConcAPPtLab »

@Socke: ich bin mir nicht sicher, da ich neu auf dem Gebiet SQL in Lazarus bin. ABer ich verwende eine SQLite3Connection, von daher gehe ich mal von SQLite aus (habe bisher nur Erfahrung mit MySQL).

@Michl: Nein, leider nicht. Das ist genau die Variante, die ich anfangs hatte, als dann der Fehler auffiel.

EDIT: Mir fällt gerade auf, dass es neben dem SQLiteConnector noch Connectors für MySQL gibt. Könnte ich meinen jetzigen Code, der soweit bis auf diesen Fehler funktioniert, verwenden, wenn ich den Connector austausche? Würde ich dann auch normale MySQL Queries schreiben können?

EDIT Vol. 2: Gut, die Suche nach SQLite3 und Autoincrement hat nun zum Ergebnis geführt: http://stackoverflow.com/questions/7905 ... -in-sqlite. Es funktioniert nun einwandfrei. Nichtsdestotrotz freue ich mich über eine Beantwortung des vorherigen Edits, damit solche lästigen Problemsituationen ausbleiben (denn MySQL beherrsche ich soweit).

Trotzdem schon Mal einen Dank an euch beide für die rasche Hilfe :)
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

Antworten