AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mysql Feldname ändern

Ein Thema von hajo2016 · begonnen am 10. Nov 2016 · letzter Beitrag vom 13. Nov 2016
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Mysql Feldname ändern

  Alt 12. Nov 2016, 09:50
Wenn Du den Fehler, den Du hier (wie selbstverständlich)
SET vldat = '+Quotedstr(mdat2)+'
behebst, auch in der StoredProc behebst, sollte diese funktionieren.

Du baust in der StoredProc einen String zusammen und dieser String enthält u. a. auch einen String, der muss dann in der StoredProc in ' gesetzt werden. Und diese fehlen hier:
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+' = ' + CONCAT('+feld2+', ' 06:00:00') + ' + INTERVAL (@serial:=@serial+2) MINUTE where '+feld2+' = ', mdatum );
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
END
um Feld1 herum.

Vermutlich würde aber auch dashier ausreichen:
Delphi-Quellcode:
StoredProc_VLDAT_Interval.Params[0].Value := 'ag_vorlage';
StoredProc_VLDAT_Interval.Params[1].Value := QuotedStr(mdat1);
StoredProc_VLDAT_Interval.Params[2].Value := 'vldat';
StoredProc_VLDAT_Interval.Params[3].Value := 'vordat';
StoredProc_VLDAT_Interval.ExecProc;
  Mit Zitat antworten Zitat
hajo2016

Registriert seit: 10. Nov 2016
Ort: Bad Harzburg
6 Beiträge
 
Delphi XE8 Professional
 
#2

AW: Mysql Feldname ändern

  Alt 13. Nov 2016, 02:46
ich hab's noch mal so probiert
Code:
mdat1:='2016-10-11';
StoredProc_VLDAT_Interval2.Params[0].Value := 'ag_vorlage';
StoredProc_VLDAT_Interval2.Params[1].Value := Quotedstr(mdat1);
StoredProc_VLDAT_Interval2.Params[2].Value := 'vldat';
StoredProc_VLDAT_Interval2.Params[3].Value := 'vordat';
StoredProc_VLDAT_Interval2.ExecProc;
Fehlermeldung: You have an error in your SQL syntax, check.... to use near ''2016-10-11'' at line 1.

genauso wenn ich für Quotedstr(madt1) -> #39+mdat1+#39 oder '"'+mdat1+'"' einsetze
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

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
hajo2016

Registriert seit: 10. Nov 2016
Ort: Bad Harzburg
6 Beiträge
 
Delphi XE8 Professional
 
#4

AW: Mysql Feldname ändern

  Alt 13. Nov 2016, 19:16
Hallo nahpets,

danke für Deine Hinweise!

Den Format(Update... habe ich zwar nicht zum laufen bekommen.
Es gab Probleme mit der letzten ')' - ohne ergab Syntaxfehler , mit ergab MySQL-Fehler
Ist aber ein interessanter Ansatz!

Letztlich war der Hinweis auf + CONCAT('+feld2+', ' 06:00:00') entscheidend.

Also Pause gemacht, was getrunken (offensichtlich war mein Oberstübchen trocken gelaufen).

Dann den Concat erst einmal richtig beschrieben und das feld2 so eingebunden wie es auch Sinn macht.
Code:
CREATE DEFINER=`root`@`%` PROCEDURE `VLDAT_INTERVAL`(tableName varchar(255), feld1 varchar(20), feld2 varchar(40), Feld3 Varchar(20), mdatum varchar(18))
BEGIN

set @serial:=0;
set @sqlstmt := CONCAT('UPDATE ', tableName, ' SET ', feld1, ' = ' , feld2, ' + INTERVAL (@serial:=@serial+2) MINUTE where ', feld3, ' = ', mdatum);
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;

END
Aufruf mit:
Code:
  mdat1:='2016-10-11';
  mdat2:=mdat1+' 06:00:00';
  StoredProc_VLDAT_Interval.Params[0].Value := 'ag_vorlage';
  StoredProc_VLDAT_Interval.Params[1].Value := 'vldat';
  StoredProc_VLDAT_Interval.Params[2].Value := Quotedstr(mdat2);
  StoredProc_VLDAT_Interval.Params[3].Value := 'vordat';
  StoredProc_VLDAT_Interval.Params[4].Value := Quotedstr(mdat1);
  StoredProc_VLDAT_Interval.ExecProc;
Es bestätigt sich wieder: Kaum macht man's richtig, schon geht es!
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 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