Autor Beitrag
UliTs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win XP*, Win 7
xBase++, Delphi 10.3
BeitragVerfasst: Do 26.09.19 11:07 
Hallo allerseits,

ich bin unter extremen Zeitdruck und scheitere gerade an einem MySql-Script.
Ich möchte mit TFDQuery ein Script ausführen. Vermutlich liegt aber der Fehler bereits im Script:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
start transaction;
insert into Datei1
  (Name,Vorname)
values
  ('Testmann','Uli');

set @PersonenId = (select Last_Insert_Id());

if @PersonenId <> 0 then
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
end if;

set @SpStRId = (select Last_Insert_Id());

if @PersonenId<>0 and @SpStRId<>0 then
  commit;
else
  rollback;
end if;

select @PersonenId PersonenId, @SpStRId SpStRId;


Bereits bei der ersten if-Abfrage kommt es zu einem Fehler #1064

Woran kann das liegen?


Zuletzt bearbeitet von UliTs am Do 26.09.19 11:16, insgesamt 1-mal bearbeitet
UliTs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win XP*, Win 7
xBase++, Delphi 10.3
BeitragVerfasst: Do 26.09.19 11:14 
Wenn ich die if-Abfragen weglasse, funktioniert es.
Also muss irgendetwas an der Syntax falsch sein. Nur was?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
start transaction;
insert into Datei1
  (Name,Vorname)
values
  ('Testmann','Uli');

set @PersonenId = (select Last_Insert_Id());

/*if @PersonenId <> 0 then*/
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
/*end if;*/

set @SpStRId = (select Last_Insert_Id());

/*if @PersonenId<>0 and @SpStRId<>0 then*/
  commit;
/*else
  rollback;
end if;*/

select @PersonenId PersonenId, @SpStRId SpStRId;
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6330
Erhaltene Danke: 134

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Do 26.09.19 12:21 
Ich bin zwar kein mySQL-Experte, aber die Syntax sieht prinzipiell korrekt aus.
Welchen Wert hat @PersonenId denn? Falls das Null ist, kann mySQL das vielleicht nicht umsetzen und der Vergleich mit 0 führt zu einem Syntax-Fehler.

Für diesen Beitrag haben gedankt: UliTs
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1576
Erhaltene Danke: 277


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 26.09.19 12:29 
Bin mir nicht sicher. Versuch mal, die Bedingung zu klammern:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
if (@PersonenId <> 0then
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
end if;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: UliTs
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4437
Erhaltene Danke: 910


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 26.09.19 15:12 
Das letzte mal als ich mir mysql angeschaut habe war "if" mitten in einem beliebigen Script nicht erlaubt. Entweder es ist Teil eines SQL Statements oder Teil eines Codeblocks in einer Stored Procedures, Trigger etc. aber nicht einfach so in einem Script.

Für diesen Beitrag haben gedankt: UliTs
UliTs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win XP*, Win 7
xBase++, Delphi 10.3
BeitragVerfasst: Fr 27.09.19 12:54 
Vielen Dank für die Antworten.

Ich vermute, dass Ralf Recht hat und "if" in einem beliebigen Script nicht erlaubt ist :-( .

Ich denke, die einzige Lösung wird dann eine Stored Procedure sein.