![]() |
Datenbank: MySQL • Zugriff über: Verbindungsdeskriptor(?!?), unit mySQL
MySQL: Update einer 2d-Matrix klappt nicht...
Hallo Leute,
ich habe folgenden Quellcode in meinem Programm(Mapeditor) vewendet, um eine geänderte Karte zu updaten. Die Karte ist 128*127 Felder groß und besteht aus Zahlen von 0 bis n, diese repräsentieren die verwendenten Texturen. Über eine Datenbank kann das dazugehörige Spiel dann die Daten auslesen und die Texturen darstellen.
Delphi-Quellcode:
Die Variablen:
for i := 1 to 127 do
for j := 0 to 127 do if NOT (map[j,i] = mapold[j,i]) then begin query := PChar('UPDATE map SET `' + inttostr(j) + '` = "' + inttostr(map[i,j]) + '" WHERE (`ID`=' + inttostr(i) + ') '); mysql_real_query(_myCon, query, Length(query)); end;
Delphi-Quellcode:
Danke im Voraus für nützliche Hilfe ;)
VAR
query: PChar; _myCon: PMySQL; //Verbindungsdeskriptor i,j,l: Integer; |
Re: MySQL: Update einer 2d-Matrix klappt nicht...
mir fiel erstmal nur die Query ansich auf:
'UPDATE map SET `' + inttostr(j) + '` = "' + inttostr(map[i,j]) + '" WHERE (`ID`=' + inttostr(i) + ')' ergibt UPDATE map SET `j` = "x" + WHERE (`ID` = i ) Fehlt also m.E. erstmal die Quotation beim letzten i, weiterhin gibts nach meinem Kenntnisstand keinen Unterschied zwischen ` und " - ich benutze für diese Quotation auch immer "QuotedStr(...)" - ist zwar mehr mehr Code, sieht aber m.E. besser aus :) Weiterhin brauchen m.E. Feldbezeichnungen nicht zwingend in Gänsefüsschen gesetzt werden, aber nun gut, das ist unwichtig, aber wenn du Integerwerte-Übergibst, brauchen die im MySQL auch nicht quotiert werden, wenn du in ein "Integer"-Feld schreibst. Abgesehen von dem nicht quotierten i sind'S zwar nur kosmetische Bemerkungen, aber vielleicht hilfts ja :) tyler |
Re: MySQL: Update einer 2d-Matrix klappt nicht...
Danke für die Antwort, sie hat mir aber leider nichts genützt...
Es klappt so oder so nicht :( |
Re: MySQL: Update einer 2d-Matrix klappt nicht...
Hallo Chris,
ich hätte etwa folgenden Code erwartet:
Delphi-Quellcode:
Grüße vom marabu
// Geschmacksmuster - ungetestet!
const sql = 'UPDATE MAP SET texture = %d WHERE row = %d AND col = %d'; var i, iRow, iCol: integer; sQuery: string; begin for iRow := 1 to 127 do for iCol := 0 to 127 do if map[iRow, iCol] <> mapold[iRow, iCol] then begin sQuery := Format(sql, [map[iRow, iCol], iRow, iCol]); // mysql_real_query(_myCon, sQuery, Length(sQuery)); // hier musst du noch korrigieren end; end; |
Re: MySQL: Update einer 2d-Matrix klappt nicht...
Nochmals Danke, aber der Fehler lag einfach nicht im Quellcode...
So ein unendlich trivialer Fehler!!! Ich hatte die Felder der MySQL-DB benannt von 0..127. Zum Demonstrieren ein Beispiel: Aus
Delphi-Quellcode:
wird beim Einsetzten so etwas wie
query := PChar('UPDATE map SET `' + inttostr(j) + '` = "' + inttostr(map[i,j]) + '" WHERE (`ID`=' + inttostr(i) + ') ');
Delphi-Quellcode:
Und SET 10=4 (Ja, die Feldnamen der DB sind Zahlen) nimmt MySQL scheinbat nicht an!
query := PChar('UPDATE map SET 10=4 WHERE ID=1');
Also hab nun Feldnamen von m0...m127 und es klappt! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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