Strickenkid Threaded Querys

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
  • Schönen Guten Abend.


    Ich verwende das Mysql plugin von Strickenkid.
    Dort gibt es auch die sogenannten Threaded Querys..


    Nun habe ich versucht das anzuwenden jedoch gab das ne menge Fehler.


    Mir würde einfach ein Anwendungsbeispiel reichen und eine kleine Information bei welchen Querys ich diese nutzen sollte.



    Lieben Gruß

  • 1. Lese dir das durch
    [ SCRIPTING ] [MySQL] OnQueryFinish - Performance verbessern!


    2. Beispiel:




    enum {
    MYSQL_RESULT_LOGIN = 0,
    MYSQL_RESULT_CARS = 1,
    }


    Das ganze verbraucht kein speicher enthält jedoch zahlen die sich automatisch erhöhen.
    Das = 0 und = 1 ist zur verdeutlichung daher beim einfügen nicht beachten.



    Query:
    mysql_query("SELECT * FROM `accounts` WHERE `name` = 'Simon' LIMIT 1", MYSQL_RESULT_LOGIN, playerid, connection);

    Absenden eines Querys der erste wert danach ist die resultid danach die spareid hier wird der wert hinter playerid genutzt und die verbindungsid


    public OnMysqlQuery(resultid, spareid, MySQL:handle) {
    mysql_store_result(handle);
    new buffer[64];
    switch(resultid){
    case MYSQL_RESULT_LOGIN:{
    mysql_fetch_row(buffer, "|", handle);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[spareid]);
    }
    case MYSQL_RESULT_LOGIN:{


    ....
    }
    return mysql_free_result(handle);
    }



    Jetzt gibt es dazu noch OnMysqlQueryArray


    mysql_query("SELECT * FROM `accounts` WHERE `name` = 'Simon' LIMIT 1", MYSQL_RESULT_LOGIN, {playerid,pID,pID2}, connection);



    public OnMysqlQueryArray(resultid, extravars[], MySQL:handle)
    {
    mysql_store_result(handle);
    new buffer[64];
    switch(resultid){
    case MYSQL_RESULT_LOGIN:{
    mysql_fetch_row(buffer, "|", handle);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[0]]);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[1]]);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[2]]);
    }
    case MYSQL_RESULT_LOGIN:{


    ....
    }
    return mysql_free_result(handle);
    }

  • Okay das wird bei Selects gemacht...


    Wie sieht das aus wenn ich Update, Insert, Delete etc benutze.. kann ich dort einfach im public kein code benutzen da nach dem query nichts weiter genutzt wird?


    Beispiel:


    Vorher:
    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert");


    Nachher:
    enum
    {
    result_Update
    }


    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert", result_Update, -1, connection);


    public OnMysqlQuery(resultid, spareid, MySQL:handle)
    {
    if(resultid == result_Update) {}
    else if () {}
    return 1;
    }

  • Das Callback wird immer aufgerufen daher bietet sich da eher an was du als zweites query gepostet hast und dahinter halt noch einen wert setzen
    weil dann kannst du direkt das abprüfen




    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1);
    public OnMysqlQuery(resultid, spareid, MySQL:handle)
    {
    if(resultid == -1)return 1;
    return 1;
    }
    ahja benutz switch das ist schneller in pawn als else if


    //edit


    normal dürfte er nicht deswegen meckern
    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1);


    falls doch musst du das dahinter ausfüllen


    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1,-1,connection);


    oder via #define
    #define NONE -1,-1,connection


    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",NONE);