sscanf mit MySQL.

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
  • format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pSpielername]);
    mysql_query(string);
    mysql_store_result(); <--- Da war der fehler da muss store rein und nicht free
    if(mysql_fetch_row_format(string)){
    sscanf(string, "p<|>e<iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[30]s[30]s[30]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>", PlayerInfo[playerid]);
    printf("SSCANF:%s",string);
    }
    mysql_free_result();


    du kannst keine datenfreistellen die nicht existieren

  • Ok, jetzt lädt er die Daten aus. Dankeschön.


    Ich weiß auch nicht was du mit deinem mysql_free_result(); hast


    Jedes mal wo ich dir dne code geschrieben habe stand jedesmal mysql_store_result();
    drinne und du selbst hast es verwendet. Also du solltest dir mal mehr im klaren darüber sein
    wann man mysql_free_result(); verwendet und für was.
    Und zwar verwendet man dies am ende eines mysqlbefehl wenn auch die weitere verarbeitungsschritt die mit mysql zu tun haben
    abgeschlossen sind. Da du damit die vorher von MySQL temporär gespeicherten Daten löscht. Also die MySQL Befehle
    Beispiel hier:
    SELECT * FROM `accounts` WHERE `Name` = '%s'


    Noch eine kleine Anmerkung gewöhne dir auch an Threaded Querys zu nutzen über OnQueryFinish
    zu dem ist das MySQL Plugin von strickenkid schneller als das R5 und R6 plugin von BlueG .
    Daher kann man das ganze nur noch mit dem R7 plugin von BlueG toppen welches zum einen schneller ist (cache funktion)
    und die Threaded Querys schon beinhaltet zu dem werden die Befehle von selbst gelöscht.

  • BlackAce JR


    Das Tut ist garnichtmal so schlecht
    [ SCRIPTING ] sscanf 2.0
    Da erklärt sich das meiste sogar von allein ;)


    Also ich selbst habe die verwendung von sscanf mit einem enum noch nicht getestet wie sie hier dar gestellt wird
    da ich mich immer noch auf diese aussage von Y_Less berufe


    http://forum.sa-mp.com/showthread.php?t=242852


    Zitat

    p is a special specifier - it can't be used inside e<>.

  • Es funktioniert einfach nicht.
    Er liest die Daten aber trotzdem soll ich mich immer Reg. Und gibt mir auch die Zahl "0" aus. Obwohl die Zahl 1 sein soll.



    format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pSpielername]);
    mysql_query(string);
    mysql_store_result();
    if(mysql_fetch_row_format(string)){
    sscanf(string, "e<p<|>iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[30]s[30]s[30]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>", PlayerInfo[playerid]);
    printf("SSCANF:%s",string);
    }
    mysql_free_result();
    printf("Du bist Reg ja oder nein:%d", PlayerInfo[playerid][pReg]);


    #1 edit edit vergessen
    #2 mysql_free_result hingeschrieben.

  • Müssen die in dem Enum genau so sein wie in der Tabelle nach der Reihe ?


    Es sind 138 Datensätze


    und hier das Enum:

    Spoiler anzeigen
    enum pInfo
    {
    pSpielername[MAX_PLAYER_NAME],
    pLevel,
    pAdmin,
    pFraktion,
    pDonateRank,
    gPupgrade,
    pConnectTime,
    pReg,
    pSex,
    pAge,
    pOrigin,
    pCK,
    pMuted,
    pExp,
    pCash,
    pAccount,
    pPlayerKreditDauer,
    pPlayerKredit,
    pCrimes,
    pKills,
    pDeaths,
    pArrested,
    pWantedDeaths,
    pPhoneBook,
    pLottoNr,
    pFishes,
    pBiggestFish,
    pJob,
    pPayCheck,
    pRest,
    pHeadValue,
    pJailed,
    pJailTime,
    pGangJailed,
    pMauled,
    pMats,
    pDrugs,
    pLeader,
    pMember,
    pFMember,
    pRank,
    pChar,
    pHitman,
    pHitmanRank,
    pDead,
    pContractTime,
    pDetSkill,
    pSexSkill,
    pBoxSkill,
    pLawSkill,
    pMechSkill,
    pJackSkill,
    pCarSkill,
    pNewsSkill,
    pDrugsSkill,
    pCookSkill,
    pFishSkill,
    Float:pHealth,
    Float:pSHealth,
    pInt,
    pLocal,
    pTeam,
    pModel,
    pPnumber,
    pPbiskey,
    Float:pPos_x,
    Float:pPos_y,
    Float:pPos_z,
    pCarLic,
    pNewLic,
    pFlyLic,
    pBoatLic,
    pFishLic,
    pGunLic, //Definition des Scheines zb die Aufgabe später
    pLKWLic,
    pRollerLic,
    pMotoLic,
    pZig,
    pKekse,
    pZigSucht,
    pGun1,
    pGun2,
    pGun3,
    pGun4,
    pAmmo1,
    pAmmo2,
    pAmmo3,
    pAmmo4,
    pCarTime,
    pMulltime,
    pPayDay,
    pPayDayHad,
    pCDPlayer,
    pWins,
    pLoses,
    pAlcoholPerk,
    pDrugPerk,
    pMiserPerk,
    pPainPerk,
    pTraderPerk,
    pTut,
    pWarns,
    Float:pGWD,
    pAdjustable,
    pFuel,
    pMarried,
    pMarriedTo[128],
    pInvWeapon,
    pInvAmmo,
    pInvWeapon2,
    pInvAmmo2,
    pInvDrugs,
    pInvMats,
    pFlugTime,
    pInvadeTime,
    pRoadblock,
    pPlayMinutes,
    pGesamtMinutes,
    pMinutesSinceLogin,
    pMinutesSinceAn,
    pSFPASS,
    pLVPASS,
    pHandyGeld,
    pHandyVer,
    pUhrID,
    pHandyID,
    pOwnPerso,
    pOwnAntrag,
    pPersoStop,
    pGehalt,
    pFrakSperre,
    pBoxMats,
    pBoxDrugs,
    pban,
    pTot,
    pFarmTime,
    pGDeaths,
    pGKills,
    pMeldung,
    phID,
    hgun[MAX_WEAPON_SLOTS],
    hgunammo[MAX_WEAPON_SLOTS],
    hOwner,
    hIn,
    hInID

  • Es kann mir jetzt jeder sagen ich hätte falsch abgezählt, mich verzählt oder sonst was, aber ich habe gewisse Enumerationen einfach nicht auf diese Weise auslesen können, ich habe immer NaN Errors bekommen. Ich bin dann dazu übergegangen, das ganze Enum auszuschreiben (Immer noch besser als für jedes Feld einen einzelnen SELECT wie bei gewissen Tutorials hier)


    Nichtsdestotrotz: Hau mal 75% der Enumeration weg (Als wäre das Enum nur ein Viertel so lang - natürlich musste es anpassen, Datensatz auch), teste und schau ob es geht, dann hängste mehr dran, wiederholst den Prozess etc - bis Du evt einen Fehler gefunden hast. Wenn Du bei 10 oder 25% des Enums anfängst kannste auch besser ausschliessen, dass Du was falsch gemacht/gezählt hast. Auf 138 am Bildschirmzählen...tönt ein bisschen kritisch (für mich wneigstens) ;)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Und Du was mir grad auffällt BlackAce, schau mal deine Specifier an: Du hast diverse Floats in der Enumeration, diese kommen aber nicht im sscanf Code vor. Dasselbe für die Strings, die sind nicht in der Enumeration. Also Enumeration und sscanf Query stimmen definitiv nicht miteinander überein. Schau dir das mal an:


    http://forum.sa-mp.com/showthread.php?t=120356


    i oder d = Integer
    f = Float
    s[LENGTH] = String


    Büttii<3 Erstell nen neuen Thread, dank dir

  • In der Datenbank sind nur 2 Accounts drin. Also ist das nicht so tragisch.



    Habe jedes Fehlt eine Zahl rein geschrieben von 1 - 136 er zeigt mir jede Zahl an....



    [00:28:35] SSCANF:GamerXiOS|test|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54.2|55.2|56|57|58|59.0|60|61|62|63|64.0|65.0|66.0|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136


    #1 Zahlen
    #2 Edit vergessen -.-