Error im mysql_fetch_int

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,


    ich habe ein Problem mit meinen Fahrzeug System.
    Woran liegt der Fehler? Kann doch eigentlich nicht sein, dass mir hier ein Warning angezeigt wird.
    PrivateVehicle[playerid][slot][modelid] = mysql_fetch_int(0, "modelid");


    Code
    warning 202: number of arguments does not match definition
  • Das geht so nicht. Wenn du das nach diesem Prinzip machen willst, dann nutze die Cache Funktionen:
    http://wiki.sa-mp.com/wiki/MyS…che_get_field_content_int


    (Beispiel ist dabei.)



    http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_int
    Gibt dir nur den Wert des ganzen Results als Integer aus, das macht für dich hier wenig Sinn. Arbeite mit den Cache Funktionen, dann bist du auf der besseren Seite.

  • Kannst du mir kurz erklären wie es geht, mit eine Teil meines Cods?
    Damit ich ein wenig Hilfestellung habe, die Tutorials im Wiki helfen mir nicht wirklich..


    Hab das jetzt so..
    forward LoadPlayerVehicles(playerid,slot);
    public LoadPlayerVehicles(playerid, slot)
    {
    mysql_query("SELECT * FROM script_vehicles WHERE Name='%s'",SpielerInfo[playerid][pName]);
    mysql_store_result(); new resultline[200];
    if(mysql_fetch_row_format(resultline))
    {
    sscanf(resultline,"p<|>s[25]diiiiiddddddddddddddddddds[32]iidd",
    PrivateVehicle[playerid][slot][vehBesitzer],PrivateVehicle[playerid][slot][modelid],PrivateVehicle[playerid][slot][vehPosX],PrivateVehicle[playerid][slot][vehPosY],PrivateVehicle[playerid][slot][vehPosZ],PrivateVehicle[playerid][slot][vehPosA],PrivateVehicle[playerid][slot][vehHealth],
    PrivateVehicle[playerid][slot][vehColor1],PrivateVehicle[playerid][slot][vehColor2],PrivateVehicle[playerid][slot][vehPaintjob],PrivateVehicle[playerid][slot][vehSpoiler],PrivateVehicle[playerid][slot][vehHood],PrivateVehicle[playerid][slot][vehRoof],PrivateVehicle[playerid][slot][vehSideskirt],
    PrivateVehicle[playerid][slot][vehLamps],PrivateVehicle[playerid][slot][vehNitro],PrivateVehicle[playerid][slot][vehExhaust],PrivateVehicle[playerid][slot][vehWheels],PrivateVehicle[playerid][slot][vehStereo],PrivateVehicle[playerid][slot][vehHydraulics],PrivateVehicle[playerid][slot][vehFrontBumper],
    PrivateVehicle[playerid][slot][vehRearBumper],PrivateVehicle[playerid][slot][vehVentRight],PrivateVehicle[playerid][slot][vehVentLeft],PrivateVehicle[playerid][slot][vehPreis],PrivateVehicle[playerid][slot][vehNeonID],PrivateVehicle[playerid][slot][vehNumberPlate],
    Vehicle[PrivateVehicle[playerid][slot][vehID]][vehFuel],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehKMStand],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehInterior],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehWorld]);


    PrivateVehicle[playerid][slot][vehID] = CreateVehicle(PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], false);
    VehicleTuning(playerid, slot);
    }
    mysql_free_result();
    return 1;
    }



    //edit: PWN hinzugefügt
    //edit: PWN bearbeitet
    //edit: MySQL Log hinzugefügt und Jeffy angesprochen

    3 Mal editiert, zuletzt von Jean_Pacino () aus folgendem Grund: //edit: PWN hinzugefügt //edit:PWN bearbeitet //edit: MySQL Log hinzugefügt und Jeffy angesprochen

  • Der Log passt nicht zu dem Code den du da gepostet hast.
    Poste mal den Code, der dieses Query beinhaltet:

    SQL
    SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'


    Damit rufst du nämlich das public LoadPlayerVehicles auf, also so wie das aussieht, nutzt du möglicherweise doch ein Plugin mit Cache Funktionen.


    Welches Plugin verwendest du denn eigentlich?

  • Hiermit lade ich den Plugin LoadPlayerVehicles.
    for(new vehSlot=0;vehSlot<MAX_PLAYER_VEHICLES;vehSlot++)
    {
    mysql_query_callback(playerid,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'","LoadPlayerVehicles");
    }


    Verwende die R5 Version von G-sTyLeZzZ.

  • Ändere das mal zu:
    for(new vehSlot=0;vehSlot<MAX_PLAYER_VEHICLES;vehSlot++)
    {
    LoadPlayerVehicles(playerid, vehSlot);
    }



    Und :
    mysql_query("SELECT * FROM script_vehicles WHERE Name='%s'",SpielerInfo[playerid][pName]);
    zu:
    mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot);

  • Hab das ganze mal geprintet, die Konsole spuckt nichts aus.
    Diesbezüglich wird also kein Fahrzeug erstellt..


    Hier mal die MySQL Log


    //edit: Push nach über 48 Stunden
    //edit: Beitrag als neu markieren gewählt

    3 Mal editiert, zuletzt von Jean_Pacino () aus folgendem Grund: //edit: Push nach über 48 Stunden //edit: BB Code richtig eingerückt //edit: Beitrag als neu markieren gewählt

  • Sorry für die späte Antwort und Danke für den Push. Ich habe deine Antwort völlig übersehen.


    Ich sehe grade das Problem im Log. Du hast mysql_query gar nicht umdefiniert, sodass man darin Parameter verwenden kann.
    mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot);


    zu:
    new query[256];
    format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
    mysql_query(query);


    Wie sieht es dann aus?

  • Der print gibt den Code irgendwie falsch aus, Fahrzeug wird InGame auch nicht erstellt.
    forward LoadPlayerVehicles(playerid,slot);
    public LoadPlayerVehicles(playerid, slot)
    {
    new query[256],resultline[200];
    format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
    mysql_query(query);
    mysql_store_result();
    if(mysql_fetch_row_format(resultline))
    {
    sscanf(resultline,"p<|>s[25]diiiiiddddddddddddddddddds[32]iidd",
    PrivateVehicle[playerid][slot][vehBesitzer],PrivateVehicle[playerid][slot][modelid],PrivateVehicle[playerid][slot][vehPosX],PrivateVehicle[playerid][slot][vehPosY],PrivateVehicle[playerid][slot][vehPosZ],PrivateVehicle[playerid][slot][vehPosA],PrivateVehicle[playerid][slot][vehHealth],
    PrivateVehicle[playerid][slot][vehColor1],PrivateVehicle[playerid][slot][vehColor2],PrivateVehicle[playerid][slot][vehPaintjob],PrivateVehicle[playerid][slot][vehSpoiler],PrivateVehicle[playerid][slot][vehHood],PrivateVehicle[playerid][slot][vehRoof],PrivateVehicle[playerid][slot][vehSideskirt],
    PrivateVehicle[playerid][slot][vehLamps],PrivateVehicle[playerid][slot][vehNitro],PrivateVehicle[playerid][slot][vehExhaust],PrivateVehicle[playerid][slot][vehWheels],PrivateVehicle[playerid][slot][vehStereo],PrivateVehicle[playerid][slot][vehHydraulics],PrivateVehicle[playerid][slot][vehFrontBumper],
    PrivateVehicle[playerid][slot][vehRearBumper],PrivateVehicle[playerid][slot][vehVentRight],PrivateVehicle[playerid][slot][vehVentLeft],PrivateVehicle[playerid][slot][vehPreis],PrivateVehicle[playerid][slot][vehNeonID],PrivateVehicle[playerid][slot][vehNumberPlate],
    Vehicle[PrivateVehicle[playerid][slot][vehID]][vehFuel],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehKMStand],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehInterior],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehWorld]);


    PrivateVehicle[playerid][slot][vehID] = CreateVehicle(PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], false);
    printf("Model ID: %d PosX: %d PosY: %d PosZ: %d PosA: %d Color1: %d Color2: %d",PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2]);
    VehicleTuning(playerid, slot);
    }
    mysql_free_result();
    return 1;
    }


    Code
    [16:59:55] Model ID: 49 PosX: 56 PosY: 55 PosZ: 52 PosA: 46 Color1: 124 Color2: 49
  • Ok, aber das sieht doch schon wesentlich besser aus.
    Poste bitte mal dein enum, das zu PrivateVehicle gehört, sowie einen Screenshot von der Struktur der Tabelle "script_vehicles", damit wir sehen können, welche Spalte was ist (Float, Integer, String...).

  • Hier mal das enum
    enum e_VehicleData
    {
    vehID,
    vehBesitzer[MAX_PLAYER_NAME+1],
    modelid,
    Float:vehPosX,
    Float:vehPosY,
    Float:vehPosZ,
    Float:vehPosA,
    Float:vehPosX2,
    Float:vehPosY2,
    Float:vehPosZ2,
    Float:vehHealth,
    vehColor1,
    vehColor2,
    vehPaintjob,
    vehSpoiler,
    vehHood,
    vehRoof,
    vehSideskirt,
    vehLamps,
    vehNitro,
    vehExhaust,
    vehWheels,
    vehStereo,
    vehHydraulics,
    vehFrontBumper,
    vehRearBumper,
    vehVentRight,
    vehVentLeft,
    vehPreis,
    vehNeon1,
    vehNeon2,
    vehNeonID,
    vehNumberPlate[32],
    Float:vehFuel,
    Float:vehKMStand,
    vehInterior,
    vehWorld,
    vehTankKM,
    vehKMStandCount,
    bool:vehMotor,
    bool:vehLicht,
    bool:vehHaube,
    bool:vehKRaum,
    VehicleTimer,
    Text3D:vehText,
    vehFraktion,
    dbID,
    };
    new Vehicle[MAX_VEHICLES][e_VehicleData];
    new PrivateVehicle[MAX_PLAYERS][MAX_PLAYER_VEHICLES][e_VehicleData];


    Hier mal die Tabelle, wie ich Sie erstelle.

  • Deine Angaben passen nicht.


    In sscanf, für ein int in der Datenbank ein "d" oder ein "i", float ein f, varchar ein s[länge].


    Das {d} am Anfang heißt, dass die ID ignoriert wird, das {d} damit der Slot ignoriert wird.



    sscanf(resultline,"p<|>{d}s[25]{d}dfffffd ...",
    Ab dem ... bitte selber weitermachen.


    Besser wäre es natürlich, es direkt in das enum zu splitten, aber dazu müsste dein enum 1:1 wie die Datenbank aufgebaut sein, das ist es leider nicht.

  • Die MySQL Log printet folgendes:

    Code
    1|Shine|0|411|1568.5856|-1874.6506|12.9763|-88.2000|1000.0000|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|15000|3|Shine|70.0000|0.0000|0|0|0|


    Das Fahrzeug ist jedoch immmer noch nicht gespawnt, woran kann es liegen?
    Jeffry:


    //edit: Jeffy angesprochen :)

    Einmal editiert, zuletzt von Jean_Pacino () aus folgendem Grund: //edit: Jeffy angesprochen

  • Ich glaube, sscanf ist nicht wirklich was für dich hier.
    Vielleicht ist das hier anschaulicher:
    MYSQL Lädt falsche werte


    Der string entspricht dem, was du aus der Datenbank lädst, also das was bei dir geprintet wird (resultline).
    case 1 wäre dann die ID
    case 2 der Besitzer
    case 3 der Slot
    case 4 die Model ID
    ...


    Kommst du damit klar?


    EDIT: Ich muss mich schon wieder entschuldigen, dass ich deine Antwort nicht gesehen habe...wobei der Thread war als gelesen markiert war. Komisch. 8|



    EDIT:
    @Jean_Pacino: Angesprochen.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()