Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL: Update einer 2d-Matrix klappt nicht... (https://www.delphipraxis.net/45496-mysql-update-einer-2d-matrix-klappt-nicht.html)

Chris WF 7. Mai 2005 11:09

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:
  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;
Die Variablen:
Delphi-Quellcode:
VAR
  query: PChar;
  _myCon: PMySQL;      //Verbindungsdeskriptor
  i,j,l: Integer;
Danke im Voraus für nützliche Hilfe ;)

Tyler 7. Mai 2005 15:09

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

Chris WF 9. Mai 2005 19:04

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 :(

marabu 9. Mai 2005 21:07

Re: MySQL: Update einer 2d-Matrix klappt nicht...
 
Hallo Chris,

ich hätte etwa folgenden Code erwartet:

Delphi-Quellcode:
// 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;
Grüße vom marabu

Chris WF 9. Mai 2005 21:51

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:
query := PChar('UPDATE map SET `' + inttostr(j) + '` = "' + inttostr(map[i,j]) + '" WHERE (`ID`=' + inttostr(i) + ') ');
wird beim Einsetzten so etwas wie
Delphi-Quellcode:
query := PChar('UPDATE map SET 10=4 WHERE ID=1');
Und SET 10=4 (Ja, die Feldnamen der DB sind Zahlen) nimmt MySQL scheinbat nicht an!
Also hab nun Feldnamen von m0...m127 und es klappt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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