Zeos --> EZSQLExepition

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Jochim
Beiträge: 32
Registriert: Mi 20. Mär 2013, 13:44
OS, Lazarus, FPC: Win7 HP x64
CPU-Target: Bit

Zeos --> EZSQLExepition

Beitrag von Jochim »

Hallo,
ich Programmiere ein DB Programm, dass die Lager und Produkte einer Firma verwallten soll. ich habe 3 verschiedende Datenbanken: Lager DB, Produkt DB und die Anzahl der Produkte in einem Lager.
Ich bin so vorgegangen wie immer doch ich bekomme nun die fehlermeldung:

Code: Alles auswählen

Projekt Lagerdatenbank hat  Exepition-Klasse >>EZSQLExepition<< ausgelöst mit der Meldung : SQLError: near ".":syntax error
mein Code zum erstellen der DB lautet:

Code: Alles auswählen

Q2.Connection:=ZClager;
   Q2.SQL.Clear;
   Q2.SQL.Add('CREATE TABLE IF NOT EXISTS lager ('+
                'id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,'+
                'standort STRING NOT NULL,'+
                'straße STRING NOT NULL, '+
                'ort STRING NOT NULL, '+
                'tel.nummer STRING NOT NULL,  '+
                'leiter STRING NOT NULL,'+
                'leiter nummer STRING NOT NULL'+
                'kapazität INTEGER NOT NULL,'+
                'akt.belegung INTEGER NOT NULL,) ; ');
   Q2.ExecSQL;
 
with ZQlager do begin
     SQL.Clear;
     SQL.Add('SELECT * FROM lager');
     Active:=True;
   end;
Mg Jochim

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos --> EZSQLExepition

Beitrag von MmVisual »

schreibe in einem SQL Befehl nie und niemals deutsche Umlaute wie das Beta-Zeichen "ß" oder äöü auch keine osteuropäische Zeichen ąłóśżó als Tabellen / Spaltennamen. Auch nehme wenn es geht möglichst keine Schlüsselwörter aus dem SQL Syntax von SQLite, MySQL, MsSQL, PostgreSQL, Firebird, Interbase ....
Das macht immer Probleme.

Aber zum Problem:
Der Punkt und das Leerzeichen im Spaltenname/Tabellenname ist auch immer TÖTLICH.

Schreibe besser so:
Akt_Belegung oder kürzer: AktBelegung

(Das letzte Komma vor ) ist auch fehl am Platz.)

Anstatt "STRING" sotte der Typ VARCHAR(n) sein, wobei n die Anzahl der Zeichen in Byte ist. Aber aufpassen, ein "ä" frisst dir zwei Byte weg.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Jochim
Beiträge: 32
Registriert: Mi 20. Mär 2013, 13:44
OS, Lazarus, FPC: Win7 HP x64
CPU-Target: Bit

Re: Zeos --> EZSQLExepition

Beitrag von Jochim »

MmVisual hat geschrieben:Aber zum Problem:
Der Punkt und das Leerzeichen im Spaltenname/Tabellenname ist auch immer TÖTLICH.

Schreibe besser so:
Akt_Belegung oder kürzer: AktBelegung
(Das letzte Komma vor ) ist auch fehl am Platz.)
Anstatt "STRING" sotte der Typ VARCHAR(n) sein, wobei n die Anzahl der Zeichen in Byte ist. Aber aufpassen, ein "ä" frisst dir zwei Byte weg.
Danke, ich habe es nun geändert, der Fehler allerdings bleibt.

Code: Alles auswählen

Q2.Connection:=ZClager;
   Q2.SQL.Clear;
   Q2.SQL.Add('CREATE TABLE IF NOT EXISTS lager ('+
                'id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,'+
                'standort VARCHAR(25),'+
                'strasse VARCHAR(25), '+
                'ort VARCHAR(25), '+
                'telnummer VARCHAR(25),'+
                'leiter VARCHAR(25),'+
                'leiternummer VARCHAR(25),'+
                'kapazitaet INTEGER NOT NULL,'+
                'aktbelegung INTEGER NOT NULL;');
   Q2.ExecSQL;
 
with ZQlager do begin
     Connection:=ZClager;
     SQL.Clear;
     SQL.Add('SELECT * FROM lager');
     Active:=True;
   end;

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Zeos --> EZSQLExepition

Beitrag von Achtzig »

'kapazität' enthält hält noch ein Umlaut

Nachtrag: Oh, jetzt nicht mehr :)

Noch ein Nachtrag: "aktbelegung INTEGER NOT NULL;" - zum Schluß fehlt eine Klammer vor dem Semikolon

Noch ein weiterer Nachtrag: Je öfter man draufschaut, desto mehr Fehler sieht man. Es muß auch AUTO_INCREMENT und nicht AUTOINCREMENT heißen.

Jochim
Beiträge: 32
Registriert: Mi 20. Mär 2013, 13:44
OS, Lazarus, FPC: Win7 HP x64
CPU-Target: Bit

Re: Zeos --> EZSQLExepition

Beitrag von Jochim »

Achtzig hat geschrieben:Noch ein Nachtrag: "aktbelegung INTEGER NOT NULL;" - zum Schluß fehlt eine Klammer vor dem Semikolon

Noch ein weiterer Nachtrag: Je öfter man draufschaut, desto mehr Fehler sieht man. Es muß auch AUTO_INCREMENT und nicht AUTOINCREMENT heißen.
Ja habe ich weg gemacht da im Kommentar zuvor gekänzelt wurde aber selbstständig geändert. Ich habe es nun einmal zum laufen bekommen, doch nun kommt der Fehler: libary routine called out of sequence. Außerdem hat es mit AUTOINCREMENT sonst auch geklappt.

Mein aktueller Code in der Form.Create:

Code: Alles auswählen

ZClager.Connected:=True;
 
   // Lagerdatenbank erstellen
   Q2.Connection:=ZClager;
   Q2.SQL.Clear;
   Q2.SQL.Add('CREATE TABLE IF NOT EXISTS lager ('+
                'id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,'+
                'standort VARCHAR(25),'+
                'strasse VARCHAR(25), '+
                'ort VARCHAR(25), '+
                'telnummer VARCHAR(25),'+
                'leiter VARCHAR(25),'+
                'leiternummer VARCHAR(25),'+
                'kapazitaet INTEGER NOT NULL,'+
                'aktbelegung INTEGER NOT NULL) ; ');
   Q2.ExecSQL;
 
   with ZQlager do begin
     SQL.Clear;
     SQL.Add('SELECT * FROM lager');
     Active:=True;
   end;
Mg Jochim

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: Zeos --> EZSQLExepition

Beitrag von EgonHugeist »

Hallo Jochim,

schau mal da rein: http://zeos.firmos.at/viewtopic.php?t=3784

Ihr habt das gleiche Problem. Ich würde vorschlagen, du legst die Tables an, schließt die TZConnection und öffnest sie wieder, um die Tabellen mit Daten zu füllen. Ich kann die nicht genau sagen, warum SQLite sich so verhält. Vielleicht existiert ein Blog oder Wiki, von dem ich nix weiß? SQLite arbeitet irgentwie sequentiell, was etwas nervt. Simples Beispiel: Öffne eine Tabelle mit 1.000.000 Datensätzen. das dauert ein wenig. Eine 2. Query soll nun ein Update auf der selben Tabelle durchführen: -> EZSQLExzeption: libary routine called out of sequence.

Dezeit hab ich keine weiteren Suggestionen, wie du diese Probleme anders handel lönntest.

Gruß Michael vom ZeosDevTeam
ZeosDevTeam

Jochim
Beiträge: 32
Registriert: Mi 20. Mär 2013, 13:44
OS, Lazarus, FPC: Win7 HP x64
CPU-Target: Bit

Re: Zeos --> EZSQLExepition

Beitrag von Jochim »

EgonHugeist hat geschrieben:schau mal da rein: http://zeos.firmos.at/viewtopic.php?t=3784
Ich komme nicht weiter, https://www.dropbox.com/s/vuqrvk7xznxrs ... rojekt.rar
Dort liegt mein Programm. Ich finde keinen Fehler mehr und vielleicht liegt es ja nicht an dem Code, darum bitte ich euch um ihr andere Tipps hat, Fehler findet.

Mg Jochim

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Zeos --> EZSQLExepition

Beitrag von hde »

@Jochim
Ich hab deine PN beantwortet, schau nach
hde

Antworten