mysql syntax drop table

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

mysql syntax drop table

Beitrag von tictac »

hallo!
ich habe noch einmal eine frage zur syntax, diesmal bei drop table:
der tabellenname ist als variable, ich habe folgenden code:

Code: Alles auswählen

SQLQuery1.close;
 SQlQuery1.SQL.clear;
 SQLQuery1.SQL.Add('DROP TABLE :tabellenname ');
 SQLQuery1.Params.ParamByName('tabellenname').AsString:=tabname;
 SQlQuery1.ExecSQL;

das kompiliert erfolgreich, aber wenn ich auf den button klicke, der diese prozedur aufruft, dann kommt als fehler:

MySQL50Connection1: Error Executing query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'' at line 1

(in diesem fall wollte ich die tabelle test löschen)

ich hoffe, ihr könnt mir helfen, wie der befehl korrekt heißt!
schonmal vielen dank!

tictac

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: mysql syntax drop table

Beitrag von Socke »

tictac hat geschrieben:MySQL50Connection1: Error Executing query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'' at line 1

Zur SQL-Syntax kann dir die offizielle Dokumentation weiterhelfen.

Nach meinem Wissen ist die Abfrage aber in Ordnung; von daher entsteht der Fehler vermutlich in der Parametersubstitution. Damit wären dann andere Personen gefragt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

Re: mysql syntax drop table

Beitrag von tictac »

naja, es müssten die anführungszeichen weg, aber ich weiß nicht, wo die herkommen...
der Name der Tabelle ist ohne Anführungszeichen, damit hab ich updatebefehle, ... erfolgreich ausgeführt. nur bei drop table und bei rename table gibt es das problem. :(
viele grüße
tictac

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: mysql syntax drop table

Beitrag von DiBo33 »

Du kannst/darfst kein Objektname (hier Tabellenname) als Parameter angeben, da dieser sonst wie du schon bemerkt hast als String gewertet wird.

Code: Alles auswählen

SQLQuery1.SQL.Add(Format('DROP TABLE %s ', [tabname]));

tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

Re: mysql syntax drop table

Beitrag von tictac »

hallo DiBo33!
vielen Dank! funktioniert super!
kannst du mir erklären, was das %s macht?

viele grüße
tictac

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: mysql syntax drop table

Beitrag von DiBo33 »

%s = String, schau dir einfach die Hilfe zu Format() an.

tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

Re: mysql syntax drop table

Beitrag von tictac »

nochmal vielen dank!!!

tictac

tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

Re: mysql syntax drop table

Beitrag von tictac »

doch noch eine frage: wie machen ich dass dann, wenn ich rename machen will und sowohl der alte als auch der neue tabellenname variablen sind?

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: mysql syntax drop table

Beitrag von DiBo33 »

Code: Alles auswählen

SQLQuery1.SQL.Add(Format('RENAME TABLE %s TO %s ', [tabnameold, tabnamenew]));


Edit: wenn du sooft den Tabellennamen ändern musst, würde ich mir eher Gedanken um das Datenbankdesign machen.

tictac
Beiträge: 23
Registriert: Di 3. Apr 2012, 11:30

Re: mysql syntax drop table

Beitrag von tictac »

nochmals vielen dank DiBo33!

naja, es soll in dem programm einmal die Möglichkeit geben, den Namen zu ändern...

viele grüße
tictac

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: mysql syntax drop table

Beitrag von DiBo33 »

Die DDL gehört eher nicht in das/ein Anwendungsprogramm sondern nur die DML.

Wenn du frei wählbare Tabellennamen zulassen möchtest dann entwerte diese besser falls der Anwender reservierte oder ungültige Namen wählt.

Code: Alles auswählen

SQLQuery1.SQL.Add(Format('RENAME TABLE `%s` TO `%s` ', [tabnameold, tabnamenew]));

Antworten