![]() |
[SQL] Fehler in Anweisung
Hi!
Ich versuche mittels SQL-Anweisung (TDatabase.Execute) eine neue Tabelle zu erstellen. Die Anweisung funktioniert wenn ich sie in Access ausführe, in meinem Programm führt Sie jedoch zu einer Exception. Datenbank: Access 97 Zugriff: BDE
SQL-Code:
Wo ist der Fehler? :gruebel:
'CREATE TABLE `RezOld` ('
+' `RezNr` COUNTER UNIQUE ,' +' `Rezeptname` STRING(50) NOT NULL ,' +' `Parent` INT NOT NULL ,' +' `Anleitung` MEMO NULL ,' +' `Bildpfad` STRING NULL ,' +' `Zutaten` MEMO NULL ,' +' `Links` MEMO NULL ,' +' PRIMARY KEY ( `RezNr` )' +');' |
Re: [SQL] Fehler in Anweisung
Hallo Fellmer Lloyd,
lass doch mal das Zeichen ` weg! |
Re: [SQL] Fehler in Anweisung
Moin!
Auch bei folgendem Code wird der Except Block ausgelöst:
SQL-Code:
'CREATE TABLE RezOld ('
+' RezNr COUNTER UNIQUE ,' +' Rezeptname STRING(50) NOT NULL ,' +' Parent INT NOT NULL ,' +' Anleitung MEMO NULL ,' +' Bildpfad STRING NULL ,' +' Zutaten MEMO NULL ,' +' Links MEMO NULL ,' +' PRIMARY KEY ( RezNr )' +');' |
Re: [SQL] Fehler in Anweisung
Und wie lautet die Exception?
|
Re: [SQL] Fehler in Anweisung
Es wird keine Meldung angezeigt, das Programm springt "still" in den Exception Block.
Das liegt evtl. daran, dass die Anweisung in einem seperaten Thread ausgeführt wird. Anmerkung: Die DB-Verbindung funktioniert. |
Re: [SQL] Fehler in Anweisung
Kannst Du mal etwas Quellcode zeigen?
|
Re: [SQL] Fehler in Anweisung
Jop, kein Problem:
Delphi-Quellcode:
Es folgen noch ein paar weitere SQL Anweisungen, die warscheinlich das gleiche Problem haben.procedure TThreadCopy.Execute; var Database: TDatabase; begin { Thread-Code hier einfügen } Database:= TDatabase.Create(Nil); try //DB Aktualisieren Database.DatabaseName:= 'REZ'; Database.LoginPrompt:= False; Database.DriverName:= 'MSACCESS'; Database.Params.Add('DATABASE NAME='+sInstallPath+'Rez.mdb'); Database.Params.Add('OPEN MODE=READ/WRITE'); Database.Open; //SQL Anweisungen //Temp Table erzeugen Database.Execute('CREATE TABLE RezOld (' +' RezNr COUNTER UNIQUE ,' +' Rezeptname STRING(50) NOT NULL ,' +' Parent INT NOT NULL ,' +' Anleitung MEMO NULL ,' +' Bildpfad STRING NULL ,' +' Zutaten MEMO NULL ,' +' Links MEMO NULL ,' +' PRIMARY KEY ( RezNr )' +');' |
Re: [SQL] Fehler in Anweisung
Hat TDatabase.Execute nicht vier Aufrufparameter, dei bei Nichtnutzung mit nil zu belegen sind?
|
Re: [SQL] Fehler in Anweisung
Ich dachte sie wären optional.
Aber auch mit den Parametern funktioniert die Anweisung nicht.
Delphi-Quellcode:
Ich google mal nach Create Table Anweisungen aus Delphi.
//Temp Table erzeugen
Database.Execute('CREATE TABLE RezOld (' +' RezNr COUNTER UNIQUE ,' +' Rezeptname STRING(50) NOT NULL ,' +' Parent INT NOT NULL ,' +' Anleitung MEMO NULL ,' +' Bildpfad STRING NULL ,' +' Zutaten MEMO NULL ,' +' Links MEMO NULL ,' +' PRIMARY KEY ( RezNr )' +');' , nil, False, nil ); Vieleicht finde ich noch was. |
Re: [SQL] Fehler in Anweisung
Ich habe die selbe Anweisung in einem TQuery ausgeführt...das selbe Ergebnis.
|
Re: [SQL] Fehler in Anweisung
Hallo Telepath :mrgreen: ,
ich bin zwar nicht der große Access-Guru, aber vielleicht versuche es mal ohne den letzten ";" in Deiner Anweisung. (PL/SQL z.B. benötigt immer einen ";" als Abschluß, aber ein TQuery nicht, soweit ich weiß) |
Re: [SQL] Fehler in Anweisung
Hach, hast mich erwischt :angle2:
Nee, an dem Semikolon liegt das auch nicht. Ich dreh bald durch :wall: -> :freak: |
Re: [SQL] Fehler in Anweisung
Hallo Fellmer,
Du benutzt ja auch die BDE als Zugang zu Access, hast Du schon einmal versucht die SQL-Anweisungen in den Datenbank-Explorer zu kopieren und dann auszuführen? Wenn die BDE dann nicht motzt und der Table erstellt wurde, liegt der Fehler vielleicht wo anderst. |
Re: [SQL] Fehler in Anweisung
Kann es sein das eine Zeile am Anfang fehlt?
und zwar:
Delphi-Quellcode:
Database.Connected := True
|
Re: [SQL] Fehler in Anweisung
@Tyrael: Das erledigt Database.Open;
@APP: Folgende Anweisung funktioniert jetzt (Im DB-Explorer):
SQL-Code:
Der Fehler Liegt also an zwei Punkten:
CREATE TABLE RezOld
( RezNr COUNTER, Rezeptname STRING(50) NOT NULL , Parent INT NOT NULL , Anleitung MEMO NULL , Bildpfad STRING NULL , Zutaten MEMO NULL , Links MEMO NULL ) Primärschlüssel
SQL-Code:
Unique-Autowert (Ohne Unique funktioniert es)
PRIMARY KEY (RezNr)
SQL-Code:
Aber wieso wohl? :gruebel:
RezNr COUNTER UNIQUE
|
Re: [SQL] Fehler in Anweisung
Access hat seine eigene Interpretation von SQL... :lol:
|
Re: [SQL] Fehler in Anweisung
Hallo Fellmer,
ich habe mal kurz gegoogelt: Zitat:
![]() Das könnte Dir weiterhelfen. |
Re: [SQL] Fehler in Anweisung
Access und sein SQL :wall:. Aber ich will kein DB Server installieren (Oracle, MySql).
@APP: Hmm...sieht so aus als müsste ich den Primärschlüssel nachträglich hinzufügen. Ich teste es gleich morgen, jetzt is Feierabend :cheers: Thx für die Tips, ich werd die fertige Lösung dann posten. :witch: [EDIT] Thx für den Link APP, es funktioniert mit folgender Struktur:
SQL-Code:
:wiejetzt: --> :dp:
CREATE TABLE RezOld
( RezNr COUNTER CONSTRAINT PK_RezNr PRIMARY KEY, Rezeptname STRING(50) NOT NULL , Parent INT NOT NULL , Anleitung MEMO NULL , Bildpfad STRING NULL , Zutaten MEMO NULL , Links MEMO NULL ) |
Re: [SQL] Fehler in Anweisung
Lege den PK an nachdem du die Tabelle erzeugt hast, das sollte eigentlich gehen:
SQL-Code:
Grüße
CREATE INDEX PK_RezOld ON RezOld(RezNr) WITH PRIMARY;
Mikhal |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz