Auto Laden mit MySQL funktioniert nicht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    Ich möchte hier Autos aus einer MySQL Datenbank auslesen.



    new str[512];
    mysql_query("SELECT * FROM `autos`");
    mysql_store_result();
    new xD; xD = 0;
    new query[256];
    new ID, mid,col1,col2,schild[20],status,Besitzer; new Float:x,Float:y,Float:z,Float:angle;
    while(mysql_fetch_row(str))
    {
    format(query, 128, "UPDATE autos SET ID = '%d'",xD);
    mysql_query(query);
    sscanf(str, "e<iiffffiiis[256]i>",ID,mid,x,y,z,angle,col1,col2,Besitzer,schild,status);
    new car = AddStaticVehicle(mid,x,y,z,angle,col1,col2);
    SetVehicleNumberPlate(car,schild);
    ChangeVehicleColor(car,col1,col2);
    xD +=1;
    }
    mysql_free_result();


    Dies wird in OnGameModeInit verwendet.


    Es soll alles Auslesen und dann für jedes einzelnes Auto die Id Wechseln, sollte man vorher welche gelöscht haben (Damit es ID 1,2,3,4,5,6, usw. ist)


    Das Problem:
    - Die Autos Spawnen nicht
    - Die Ids werden neu zugeordnet, aber die 5 wird übersprungen (habe bisher nur 5 Autos, letztes ist ID 6)


    MfG

  • Wenn du per SELECT * ausliest werden die einzelnen felder durch ein | getrennt, also musst du p<|> verwenden.
    Ausserdem benutzt du e<>, was dafür gedacht ist die einzelnen parameter direkt an ein enum weiter zu geben, was du nicht tust^^
    Probier es mal so:
    sscanf(str, "p<|>iiffffiiis[256]i",ID,mid,x,y,z,angle,col1,col2,Besitzer,schild,status);

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Danke, hatte das mit dem enum in deinem Tutorial überlesen (auch dafür danke :D)
    Die ID 5 wird dennoch übersprungen, und ich schätze mal dass es auch so bleibt wenn ich weitere Autos Einfüge


  • Die Autos Habe ich per dcmd Befehl Ingame eingefügt

  • Benutzt du für die ID Spalte Auto Increment?
    Ansonsten versuch mal die Udate query mit ner where bedingung zu versehen. Glaube gerade nicht das er das so einfach ändern kann.
    format(query, 128, "UPDATE autos SET ID = %d WHERE ID = %d",xD,ID);

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Edit2:
    Habs nun so:

    new str[512];
    mysql_query("SELECT * FROM `autos`");
    mysql_store_result();
    new query[256];
    new RID, ID, mid,col1,col2,schild[20],status,Besitzer; new Float:x,Float:y,Float:z,Float:angle;
    while(mysql_fetch_row(str))
    {
    sscanf(str, "p<|>iiiffffiiis[256]i",RID,ID,mid,x,y,z,angle,col1,col2,Besitzer,schild,status);
    ID = AddStaticVehicle(mid,x,y,z,angle,col1,col2);
    SetVehicleNumberPlate(ID,schild);
    ChangeVehicleColor(ID,col1,col2);
    format(query, 128, "UPDATE autos SET ID = %d WHERE RID = %d",ID,RID);
    print(query);
    mysql_query(query);
    }
    mysql_free_result();


    Funktioniert. RID ist nun Autoincrement, und wird nicht verändert, also geht immer weiter hoch auch wenn Autos gelöscht werden, ID bleibt die ID des Autos Ingame, und die Abfrage funktioniert nun auch.
    Danke für die Hilfe Maddin

    2 Mal editiert, zuletzt von Intrepidus ()