Mysql auslese problem mit AddStaticVehicle.

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
  • Hallo ihr lieben Mitschreiber :).


    So werden die Fahrzeuge ausgelesen.
    stock LoadCars()
    {
    new i;
    new xx,tinstring[6];
    for(; i<=MAX_CARS; i++) {
    format(Car[i][owner], 24, "%s", mysql_GetStringWithInt("Cars", "owner", "id", i));
    Car[i][x] = mysql_GetFloatWithInt("Cars", "x", "id", i);
    Car[i][y] = mysql_GetFloatWithInt("Cars", "y", "id", i);
    Car[i][z] = mysql_GetFloatWithInt("Cars", "z", "id", i);
    Car[i][r] = mysql_GetFloatWithInt("Cars", "r", "id", i);
    Car[i][c1] = mysql_GetIntWithInt("Cars", "c1", "id", i);
    Car[i][c2] = mysql_GetIntWithInt("Cars", "c2", "id", i);
    format(Car[i][plate], 20, "%s", mysql_GetStringWithInt("Cars", "plate", "id", i));
    Car[i][model] = mysql_GetIntWithInt("Cars", "model", "id", i);
    Car[i][price] = mysql_GetIntWithInt("Cars", "price", "id", i);
    Car[i][car] = AddStaticVehicleEx(Car[i][model], Car[i][x], Car[i][y], Car[i][z], Car[i][r], Car[i][c1], Car[i][c2], -1);
    SetVehicleNumberPlate(Car[i][car], Car[i][plate]);
    //printf("i = %d, owner = %s, x = %f, y = %f, z = %f, r = %f, c1 = %d, c2 = %d, plate = %s, model = %d, price = %d, car = %d", i, Car[i][owner], Car[i][x], Car[i][y], Car[i][z], Car[i][r], Car[i][c1], Car[i][c2], Car[i][plate], Car[i][model], Car[i][price], Car[i][car]);
    xx=1;
    for(;xx!=18;xx++) format(tinstring,6,"mod%d",xx), Car[i][mod][xx] = mysql_GetIntWithInt("Cars", tinstring, "id", i);
    AddTuning(i);
    }
    return 1;
    }


    Wenn der MySql Server lokal auf meinem Rechner läuft. Dann ist alles Perfekt.
    Jedoch wenn der MySql Server außerhalb ist dann klappt nichts.
    Ich kann einen Intergern und alles andere auslesen.
    Aber die AddStaticVehicle Funktion klappt leider nicht.


    Ich hoffe um hilfe.


    Mfg. Dein Pate

  • Es funktioniert ja alles prima wenn ich es über einen Lokalen MySql Server lese.


    Jedoch wenn der Server Extern ist klappt es nicht mehr, dass AddStaticVehicle.
    Aber andere Int usw können ausgelesen werden.



    // Edit
    CreateVehicle zeigt keine änderung.

  • Warum debugst du den Code dann nicht einfach?
    Nur mit dem Code einen Fehler zu entdecken ist nicht immer möglich.

    stock LoadCars()
    {
    print("LoadCars()"); // <----
    // [...]
    for(; i<=MAX_CARS; i++) {
    printf("Schleifendurchlauf mit i = %d",i); // <----
    format(Car[i][owner], 24, "%s", mysql_GetStringWithInt("Cars", "owner", "id", i));


    Der Code ist aber mehr als schlecht bei dir.
    Es würde auch komplett mit "SELECT * FROM `Cars`" als SQL Kommando gehen und etwas abgewandeltem Code. Das ist 1 Kommando.
    Bei dir sind es 10 * MAX_VEHICLES SQL Kommandos, also 20000. Dabei weisst du damit noch nicht mal, ob zu jeder ID zwischen 0 und 2000 überhaupt ein Eintrag existiert.

  • Zitat

    Es wird 100 mal geprintet.
    "Schleifendurchlauf mit i = "


    Dann mach die Debugmeldungen doch mal weiter bis zu AddStaticVehicleEx ( X,Y,Z,Modelid,R etc. ) um den Fehler zu finden.



    Zitat

    Teach me master.
    Bitte zeige mir wie ich es Mit einem Einizigen Befehl machen kann :)


    Hast zwar nicht geschrieben welches MySQL Plugin du verwendest, vom Prinzip her ist es bei allen gleich. Lediglich die Funktionsnamen unterscheiden sich etwas und ob Threaded- oder nicht-Threaded Queries.

    Spoiler anzeigen
    Du hast aber eh nicht-Threaed.


    http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_row_format



    //Edit:
    Ich zeig dir aber schon mal einen Fehler:

    Zitat

    for(; i<=MAX_CARS; i++) {


    Ein Array der Größe N hat gültige Indizes von 0 bis N-1.

  • stock LoadCars()
    {
    mysql_query("SELECT * FROM cars");
    mysql_store_result(); new resultline[200];


    if(mysql_fetch_row_format(resultline))
    {
    printf("Schleifendurchlauf");
    }
    else print("false");
    mysql_free_result();
    return 1;
    }


    Dies habe ich nun geschaffen.
    Weiter wüsste ich jetzt leider nicht. Ich bräuchte hilfe