Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL] Feldwert bei Insert wird als Spalte interpretiert (https://www.delphipraxis.net/161391-%5Bsql%5D-feldwert-bei-insert-wird-als-spalte-interpretiert.html)

Medium 1. Jul 2011 12:05

Datenbank: MySQL • Version: 4.1.9 • Zugriff über: UniDAC

[SQL] Feldwert bei Insert wird als Spalte interpretiert
 
Mahlzeit!

Ich hab hier ein arg seltsames Phänomen. Folgede einfache Sache:
Delphi-Quellcode:
  Qry.SQL.Text := 'INSERT IGNORE INTO bild_dyn SET ElementName = "'+Components[i].Name+'"';
  Qry.Execute;
führt zu diesem Fehler:
Code:
---------------------------
Anwendungsfehler
---------------------------
Exception EUniError in Modul MC_ZusatzZwenkau.exe bei 0011F9E0.
#42S22Unknown column 'T1Max' in 'field list'.
---------------------------
OK  
---------------------------
Der Inhalt von SQL.Text ist zum Zeitpunkt des Executes:
'INSERT IGNORE INTO bild_dyn SET ElementName = "T1Max"'
Also nichts spannendes. Die "Qry" ist eine einfache TUniQuery, die an anderen Stellen auch ihren Dienst tut, und die Tabelle nutzen wir in dieser Form auch schon einige Zeit (ElementName ist das einzige NOT NULL Feld darin, und auch der einzige Index). Das trat erst jetzt auf, wo ich die alten Zeos-Kompos gegen UniDAC getauscht habe, mit Zeos ging das bisher.
Aber wie kommt UniDAC hier auf den Trichter, den einer Spalte zugewiesenen WERT als Spaltennamen zu interpretieren?

Der selbe Fehler tritt auch auf, wenn ich das Statement so schreibe:
'INSERT IGNORE INTO bild_dyn (ElementName) VALUES ("T1Max")'
Beide gehen aus einem anderen SQL Client heraus auch ohne Murren.

Ich bin etwas ratlos :gruebel: Hat da wer eine spannende Idee parat? Dankschö schonmal!

jobo 1. Jul 2011 12:32

AW: [SQL] Feldwert bei Insert wird als Spalte interpretiert
 
Keine Ahnung von ZEOS aber ich würde mal tippen, dass der Stringwert nicht "richtig" gequoted ist.
" durch ' ersetzen und oder mit quotedStr arbeiten.

joachimd 1. Jul 2011 12:35

AW: [SQL] Feldwert bei Insert wird als Spalte interpretiert
 
daher nehme man Parameter ... übrigens wird in SQL ein Text mit einfachen, nicht mit doppelten Quotes eingepackt:

Delphi-Quellcode:
  Qry.SQL.Text := 'INSERT IGNORE INTO bild_dyn SET ElementName = '+QuotedStr(Components[i].Name);
  Qry.Execute;
oder besser
Delphi-Quellcode:
  Qry.SQL.Text := 'INSERT IGNORE INTO bild_dyn SET ElementName = :elementname';
  Qry.ParamByName('elementname').AsString:=Components[i].Name;
  Qry.Execute;

p80286 1. Jul 2011 12:52

AW: [SQL] Feldwert bei Insert wird als Spalte interpretiert
 
Zitat:

Zitat von joachimd (Beitrag 1109453)
... übrigens wird in SQL ein Text mit einfachen, nicht mit doppelten Quotes eingepackt

Da ich schon Schnittstellen gesehen habe, die " als Stringbegrenzer genutzt haben.....
Leider nicht allgemeingültig.

Gruß
K-H

Medium 1. Jul 2011 12:57

AW: [SQL] Feldwert bei Insert wird als Spalte interpretiert
 
Jap, das war der Fehler. Danke! Ich hatte mit " und ganz ohne getestet, das gab beides den Fehler, aber es lief beides ohne Murren im MySQL Admin Tool und mit Zeos. UniDAC scheint da dann weniger zu vergeben :) Die Fehlermeldung hat mich nur so völlig irritiert. Merci! (War ja fast zu einfach wieder, so im Nachhinein.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz