MySQL -> Data truncated for column
-
Hallo
Hab ich was falsch geschrieben? Der Parameter wird doch definiert, ParamCheck steht übrigens auf false...
Sollte ParamCheck nicht eher auf true stehen?
BCB-Hilfe schrieb:
In einer Anwendung, die keine parameterisierten Abfragen verwendet, könnte ParamCheck auf false gesetzt werden, aber in allen anderen Fällen sollte ParamCheck true sein.
bis bald
akari
-
@akari: Danke für deine Antwort, ich hatte nur in einem anderen Beitrag gelesen, dass ParamCheck auf false stehen muss wenn die Parameter im Code zugewiesen werden, selbst nach Umstellung auf true erhalten ich immer noch den selben Fehler.
LG, Maik
-
hier stand blödsinn...
mfg
xXx
-
Je nach Datenbank-Provider kann es sein, daß man die Parameternamen exakt übernehmen muß, d.h. inkl. des Doppelpunkts.
Probiere daher mal:ParamByName(":MWST_SPIELER")
Edit: ich muß aber zugeben, daß ich mich mit MySql nicht wirklich auskenne.
P.S. Dein Update-Befehl sieht eigenartig aus - ich kenne eigentlich nur:
SET MWST_SPIELER = :MWST_SPIELER
'VALUES' kenne ich nur beim Insert-Befehl.
Und auch die Nummer könntest du als Parameter übergeben:
ADOQuery4->SQL->Add("WHERE NUMMER = :NUMMER"); ADOQuery4->Parameters->ParamByName(":NUMMER")->Value = IntToStr(nummer);
So ersparst du dir jeweils den richtigen Datentyp explizit übergeben zu mässen (d.h. bei Strings immer an die Hochkommata zu denken, bei DateTime immer das Datenbank-Format benutzen zu müssen etc.).
Ein wichtiger Vorteil bei den Parametern ist auch noch das sog. Escapen bzw. Quoten, d.h. wenn z.B. innerhalb des Textes selber einfache Anführungsstriche oder sonstige Sonderzeichen (z.B. der Backslash '\') vorkommen: "It's bad".akari:
Danke auch für deine wundervolle Erklärung bzgl. der Verwendung von SQL-Parametern.
-
Th69 schrieb:
Je nach Datenbank-Provider kann es sein, daß man die Parameternamen exakt übernehmen muß, d.h. inkl. des Doppelpunkts.
Echt? Hab ich ja noch nie gesehen (was aber nichts heißen muss
). Aber meiner Meinung nach leitet der Doppelpunkt nur Parameter ein, damit der SQL-Parser erkennt, was Parameter sind.
Ich frage mich allerdings gerade, ob Parameter den gleichen Namen haben dürfen, wie Felder?!?
ParamCheck muss auf true sein, da sonst die Parameterliste nicht aktualisiert wird, wenn der Select (zur Laufzeit) genändert wird.
Was passiert denn, wenn Du die Abfrage vorbereitest, bevor Du den Parameter setzt?
-
Also ich komme hier nicht weiter, wäre toll wenn mir jemand sagen könnte ob ich bei der UPDATE-Routine in Verbindung mit MySQL überhaupt Parameter verwenden kann...
LG, Maik
-
Trag doch bitte mal den Select direkt in die Query ein und schau, ob er die Parameter dann findet.
-
Was meinst du mit SELECT? Ich mache hier eine UPDATE-Routine. Kann er denn die Parameter überhaupt finden wenn die Abfrage direkt in die Query schreibe? Ich meine die Parameter werden bei mir ja im Code erst definiert...
LG, Maik
-
So, ich habe nun noch mal im Netz recherhiert, es gibt für den UPDATE-Befehl keine definitv keine Möglichkeit Parameter zu übergeben...War also alles umsonst, und ich fange ganz oben im Thread wieder an. Kann sich jemand den Fehler erklären? Ich habe keine Ahnung...
LG,
Maik
-
maikmueller schrieb:
So, ich habe nun noch mal im Netz recherhiert, es gibt für den UPDATE-Befehl keine definitv keine Möglichkeit Parameter zu übergeben...
Wärst Du so freundlich, die Quelle zu verlinken? Mich interessiert, woher diese Einschränkung kommt. Danke!
-
Zu dem SQL:
* du kannst dir im Debugger mal den String geben und in einer mysql-Konsole ausführen und schauen was passiert
* hast du die Lokale beachtet? Nicht dass FloatToStr ein Dezimalkomma verwendet und mysql ein Dezimalpunkt erwartet
-
Habe das Problem gerade erkannt, habe tatsächlich vergessen den String mit Punkt zu formatieren. Jetzt funktioniert es, danke an Alle...
LG, Maik