Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#10

AW: Mysql Feldname ändern

  Alt 13. Nov 2016, 10:24
Schau Dir bitte mal genau an, was für eine Zeichenfolge hierbei + CONCAT('+feld2+', ' 06:00:00') + herauskommt.

Wenn also StoredProc_VLDAT_Interval2.Params[1].Value := Quotedstr(mdat1); mit dem obigen zusammengefügt wird, kommt da niemals eine gültige Zeichenfolge für ein SQL-Statement heraus.
SQL-Code:
CREATE DEFINER=`root`@`%` PROCEDURE `VLDAT_INTERVAL`(tableName varchar(255), mdatum varchar(20), feld1 varchar(20), feld2 varchar(20))
BEGIN

set @serial:=0;
set @sqlstmt := CONCAT('UPDATE ', tableName, ' SET ' + feld1 + ' = ' + feld2 + ' " 06:00:00" INTERVAL (@serial := @serial + 2) MINUTE where ' + feld2 + ' = "' + mdatum + '"');
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
END
(Hab' kein MySQL zur Verfügung, so dass ich nicht prüfen kann, ob ich hier jetzt irgendwo Syntaxfehler eingebaut habe.)

Wird bei MySQL in der Fehlermeldung nur der Hinweis auf die Fehlerposition ausgegeben, oder enthält die Fehlermeldung eventuell auch das ganze Statement? Wenn ja, poste das hier doch bitte mit, dann lassen sich Syntaxfehler besser erkennen.

Alternativ könntest Du auch so vorgehen:
SQL-Code:
CREATE DEFINER=`root`@`%` PROCEDURE `VLDAT_INTERVAL`(v_stmt varchar(4096))
BEGIN

set @serial := 0;
set @sqlstmt := v_stmt;
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
END
Delphi-Quellcode:
var
   sSQL : String;
begin
  ...
  mdat1 := '2016-10-11';
  sSQL := Format('UPDATE %s SET %s = %s + %s INTERVAL (@serial := @serial + 2) MINUTE where %s = %s;', ['ag_vorlage', 'vldat', 'vordat', QuotedStr(' 06:00:00'),'vordat', QuotedStr(mdat1)]);
StoredProc_VLDAT_Interval2.Params[0].Value := sSQL;
StoredProc_VLDAT_Interval2.ExecProc;

Geändert von nahpets (13. Nov 2016 um 23:51 Uhr) Grund: Fehler in sSQL behoben
  Mit Zitat antworten Zitat