RFT MySql + SQLLite (Remake) Version 2.0.1 (Bug FIx) RC1 (RC2 in bearbeitung)

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
  • RFT MySql (rSQL) (Remake) Version 2.0.0RC1
    Funktionen:




    +MySql noch nie so einfach
    +Atemberaubende Auslese geschwindigkeit da ein Auslese Query nur 1x ausgeführt wird.
    +rSQL Debugging (Fehler werden gemeldet)
    +rSQL V2.1.0in bearbeitung (Neue Features hrhr)




    Code
    r_mysql_debug();



    Aktiviert das rSQL debugging (Ordner "rSQL" muss in den Scriptfiles erstellt werden).




    Code
    r_mysql_connect(host[], user[], password[], database[], bool:AutoReconnect);



    Verbindet euer Script mit einer Danken bank "AutoReconnect" aktiviert das automatische wieder verbinden sofern es auf true gesetzt wurde.



    Code
    r_mysql_connected()



    Überprüft die Verbindung und verbindet erneut sofern AutoReconnect auf true gesetzt wurde.




    Code
    r_LoadEntrance(table[], where1[], where2[]);


    Lädt einen Eintrag aus der Datenbank.



    Code
    r_UnloadEntrance()



    Resetet den rSQL Ram.


    r_GetString(field[]);


    Gibt einen String wieder sofern ein Eintrag geladen wurde,


    Code
    r_GetFloat(field[]);


    Gibt einen Float wieder sofern ein Eintrag geladen wurde,


    Code
    r_GetInt(field[]);


    Gibt einen Wert wieder sofern ein Eintrag geladen wurde,



    Code
    r_mysql_SetString(field[], to[])



    Speichert einen String sofern ein Eintrag geladen wurde



    Code
    r_mysql_SetFloat(field[], Float:to[])



    Speichert einen Float sofern ein Eintrag geladen wurde



    Code
    r_mysql_SetInt(field[], to)



    Speichert einen Wert sofern ein Eintrag geladen wurde



    Code
    r_mysql_Insert(table[], string[], format[], {Float,_}:...)



    Erstellt einen Eintrag.


    Beispiel:



    Code
    r_mysql_Insert("test", "name,id,pos", "sdf", "Jo", 55, 6.0);



    Würde einen Eintrag in der Tabelle: "test" erstellen mit folgenden Werten:


    FeldName: name = Jo
    FeldName: id = 55
    Feldname pos: 6.000000



    MySql Plugin: R6 -2 von GStylez wird benötigt.
    rSQL(MySql Version)
    SQLLiteVersion: Kein Plugin wird benötigt.(wurde überhaupt nicht getestet - ungetestet)
    rSQL(SQLLite Version)


    System wurde nur zu helfte geprüft. In der RC2 wird es auf allen Systemen getestet. Wenn die neuen Features stehen.


    Edit by: V 2.0.0 geaddet.



    \\Edit: V2.0.1 geaddet.


    - Auto Reconnect BUg gefixxt.

    RFT

    12 Mal editiert, zuletzt von RFT ()

  • Wow


    ich dachte immer das Goldkiller der MySQL Meister währe aber mit dir hab ich jetzt nicht gerechnet


    Respekt


    10/10

  • Wie auch bei deinem File Cached Base Include interessiert mich hier, was nun besser an deinem ist als bei dem Includes von Strickenkid oder G-Stylzes. Also wie kamst du darauf das überhaupt zu scripten. Also großes Lob das ist mal was neues. Aber ist es auch besser oder schneller?


    Mfg

    Die Macht etwas zu bewirken, ist in Dir. Du musst sie nur rauslassen


    cristiano-ronaldo-525-portugal-euro-2012-banner-wallpaper.jpg

  • Wie auch bei deinem File Cached Base Include interessiert mich hier, was nun besser an deinem ist als bei dem Includes von Strickenkid oder G-Stylzes. Also wie kamst du darauf das überhaupt zu scripten. Also großes Lob das ist mal was neues. Aber ist es auch besser oder schneller?


    Mfg



    Es ist für Anfänger leicht zu bedienen. Schneller als das Plugin von GStylez oder Strickendkid kann es nicht sein da es das Plugin von GStylez benutzt.
    Der Vorteil daran ist mit diesen System kann so ziemlich jeder Anfänger sein Script auf MySql umbauen.


    LG RFT

    RFT

  • Wie auch bei deinem File Chaed Base Include interessiert mich hier, was nun besser an deinem ist als bei dem Includes von Strickenkid oder G-Stylzes. Also wie kamst du darauf das überhaupt zu scripten. Also großes Lob das ist mal was neues. Aber ist es auch besser oder schneller?


    Mfg

    Du vergleichst Äpfel mit Birnen^^


    RFT: Du solltest noch dazu schreiben für welches Plugin das ausgelegt ist, oder in der nächsten Version es für beide Plugins kompatibel machen. Und vllt strings escapen, zur sicherheit.

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

  • Du vergleichst Äpfel mit Birnen^^


    RFT: Du solltest noch dazu schreiben für welches Plugin das ausgelegt ist, oder in der nächsten Version es für beide Plugins kompatibel machen. Und vllt strings escapen, zur sicherheit.



    Strings Escapen wäre noch eine Idee um Fehler zu verhindern.
    Für beide Versionen auslegen ist mal eine Idee werde ich in der nächsten Version denke ich mal realisieren =).

    RFT

  • Es ist einfach so ich frage mich wieso sowas gescriptet wird wenn es sowas bereits gibt. Deswegen frage ich immer nach. Tut mir leid. Ich möchte einfach immer auf dem neuesten Stand bleiben, was das beste, was das schnellste ist ;) Ich hoffe das stört nicht.


    Nun gut da es nur einfacher ist, werde ich es wohl nicht benutzen. Aber trotzdem für deine Mühe und für deine leichtere Bedienbarkeit ein großes Lob. Denke schon das dies einige verwenden werden ;)

    Die Macht etwas zu bewirken, ist in Dir. Du musst sie nur rauslassen


    cristiano-ronaldo-525-portugal-euro-2012-banner-wallpaper.jpg

  • Mein Meistertitel wurde mir hier wohl aberkannt... .


    r_mysql_GetFloat
    Funktioniert nicht richtig.Das Tag fehlt im Funktionskopf.
    new bool:r_GET[3][64];
    Ehm,bool :-O?
    format(query, sizeof(query), "SELECT * FROM %s WHERE `%s`='%s'", r_GET[0], r_GET[1], r_GET[2]);
    Dann nimm doch direkt `%s` ( Var ) anstatt * , ist doch unnötiges Laden da du das Ergebnis danach eh wieder löschst und nur den gesuchten Eintrage daraus ausließt.


    Stimme dennoch Austrianer zu.Da würde ich lieber bei den Funktionieren von Maddin bleiben,die beim Tutorial bei liegen.



  • Das Bool ist mir ausversehen dahin gerutscht war nicht extra behebe ich direkt.
    Die Funktionen in Maddin´s Tutorial hab ich lang bevor maddin den Thread geschrieben hat veröffentlicht. Nur das Maddin in diesen Funktion die String´s nochmal escapen lässt sonst sind es die selben wie meine aus meinem alten System "Thema" verlinkt.


    LG RFT



    //Edit:


    Goldkiller das ist Quatsch r_mysql_GetFloat funktioniert da ich den Tag im return gegeben habe. War mir nach deiner Aussage selbst nicht mehr so sicher und habe es getestet mit Erfolg.

    RFT

    Einmal editiert, zuletzt von RFT ()

  • Dann teste es nochmal, es funktioniert nicht richtig.
    Wenn ich es so wie von dir mal ausprobiere,bekomme ich falsche Ergebnisse ( Nebenbei, du hast sowieso float geschrieben - float != Float ).


    Falls du es auch probieren möchtest,
    main() {
    new
    Float:fVar;
    r_mysql_Connect_To_Database("localhost", "root", "", "accounts");
    r_LoadSQLEntrance("accounts", "id", "1");
    fVar = r_mysql_GetFloat("prozent");
    printf("%f",fVar);
    }
    Hier der Datenbank Eintrag:
    http://s14.directupload.net/file/d/2879/235nfdew_png.htm
    Lass ich das mal laufen:

    Zitat

    [23:49:52] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
    [23:49:52] OnGameo
    [23:49:52] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
    [23:49:52] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
    [23:49:52] 1123478016.000000


    1123478016.000000 != 123.457


    Änder ich deine Funktion um in:
    stock Float:r_mysql_GetFloat(Var[])
    {
    return floatstr(r_mysql_GetString(Var));
    }
    und teste nochmal:

    Zitat

    [23:51:45] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
    [23:51:45] OnGameo
    [23:51:45] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
    [23:51:45] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
    [23:51:45] 123.457000


    Jetzt stimmt der Wert :/.

  • [23:49:52] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
    [23:49:52] OnGameo // <---- Was bedeutet das, dies steht auch bei mir in der Console, mit dem Strickenkid Plugin.
    [23:49:52] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
    [23:49:52] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
    [23:49:52] 1123478016.000000


    Wäre nett, wenn mir das mal flott einer sagen könnte, hab dies bezüglich auch ein Thread aufgemacht, aber es wusste auch keiner. :/


    MfG



  • Alles klar ich habe es nur Flüchtig getestet aber hätte ich eigentlich auch so wissen müssen ist ja immerhin nicht mein erstes MySql System. Ich werde nacher eine neue Version bringen wo sich auch das Ablagern der Felder auszahlt.
    LG RFT

    RFT

  • "Goldkiller verlieren könnte sein Titel. Keine Frage das ist. Nur ob Goldkiller wird können mächtig antworten, das ich nicht wissen."


    Sollte das Plugin wirklich solche Reaktionszeiten aufweisen, wird hier der Grundstein einer neuen MySQLPlugin Serie gesetzt. Dies begründet einen weiteren Schritt Erfahrung und Fortschritt in SAMP :)


    Es freut mich zu sehen, dass es noch so schöne Veröffentlichungen gibt und verbleibe in der Hoffnung, dass jenes Plugin auch im englischen Forum angeboten wird.


    Zusammengefasst für Leute, die der deutschen Sprache nicht mächtig sind: 10/10


    Aloha!

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • Zitat

    Sollte das Plugin wirklich solche Reaktionszeiten aufweisen, wird hier der Grundstein einer neuen MySQLPlugin Serie gesetzt. Dies begründet einen weiteren Schritt Erfahrung und Fortschritt in SAMP


    Das sind Funktionen, welche auf ein bereits vorhandenes Plugin zugeschnitten worden sind.
    Das sollte dir ja eigentlich klar sein.


    Zitat

    dass jenes Plugin auch im englischen Forum angeboten wird.


    GStylez gibt es doch nur im englischen Forum.


    B2T:


    Finde es ganz nett, für den Umstieg, und auch vom Speedtest scheint ordentlich vorgegangen zu sein von daher 9/10.


  • stock Float:r_mysql_GetFloat(Var[]){ return floatstr(r_mysql_GetString(Var));}



    RFT


    Nettes Teil, nun, Maddins Tutorial* wurde erklärt man konnte sich besser mit MySQL vertragen, hier gibt es leider keine großartige Erklärung dazu, es wäre nett wenn du zu diesem Include ein Tutorial schreiben würdest, ja mir ist bewusst dass einige denken "Ist doch klar wie man das macht" dennoch wäre eine Erklärung nett :)
    Aus dem Grund weil es kein Tutorial ist, stört mich diese Sache auch nicht, ich fände es nach einem Tutorial "vollständiger".


    Weiterso :) :thumbup:



  • Goldkiller hat die Lösung gepostet, Außerdem benötigt dieses Tool das Plugin von GStylez.



    @Rest danke für eure sehr guten Bewertungen.
    Hat einer von euch noch irgendwelche Wünsche für die nächste Version ?


    LG RFT

    RFT

  • Der Speedtest ist nicht wirklich aussagekräftig.
    Zum einen hast du einen Fehler bei der Berechnung der Zeit:

    new Tick2=GetTickCount();
    printf("(RFT SQL)Dauer: %dms", r_tests[0][id]);
    r_tests[0][id]=Tick2-Tick;
    Du gibst zuerst "r_tests[0][id]" aus (was standardmäßig 0 ist) und weißt der Variable erst danach einen Wert zu --> Deine Werte sind alle 0ms.


    Außerdem lässt sich dein Speedtest nicht auf die Realität übertragen, da du 1000 mal das selbe Feld abfragst.
    Damit ist klar, dass dein Code "gewinnt", da dein Code nicht jedes mal einen neuen Query abschickt.


    Folgender Code ist ein aussagekräftigerer Speedtest, da jedes mal ein anderes Feld abgefragt wird.

    Spoiler anzeigen
     

    #include <a_samp>
    #include <rtf>
    new r_tests[2][6];
    main(){}
    public OnGameModeInit()
    {
    r_mysql_Connect_To_Database("localhost", "root", "", "datenbank");
    for(new i = 1; i < 6; i++) RichtigerTest(i);
    print("Ergebnisse:");
    for(new i = 1; i < 6; i++) {
    if(r_tests[0][i]<r_tests[1][i])printf("(%d): RFT MySql war: %dms schneller", i, r_tests[1][i]-r_tests[0][i]);
    else printf("(%d): RFT MySql war: %dms langsamer", i, r_tests[0][i]-r_tests[1][i]);
    }
    return 1;
    }

    Spoiler anzeigen
    RichtigerTest(id)
    {
    new str[4], string[65];
    new Tick=GetTickCount();
    for(new i = 0; i < 1000; i++) {
    format(str, 4, "%d", (i+2)); // i+2, da IDs in meiner Tabelle erst bei 2 beginnen
    r_LoadSQLEntrance("tabelle", "ID", str);
    SendClientMessage(0, 0xAFAFAFAA, r_mysql_GetString("FELD"));
    r_UnloadSQLEntrance();
    }
    new Tick2=GetTickCount();
    r_tests[0][id]=Tick2-Tick;
    printf("(RFT SQL)Dauer: %dms", r_tests[0][id]);
    Tick=GetTickCount();
    for(new i = 0; i < 1000; i++) {
    format(string, 128, "SELECT `FELD` FROM `tabelle` WHERE `ID` = '%d'", (i+2)); // i+2, da IDs in meiner Tabelle erst bei 2 beginnen
    mysql_query(string);
    mysql_store_result();
    mysql_fetch_row(string);
    mysql_free_result();
    SendClientMessage(0, 0xAFAFAFAA, string);
    }
    Tick2=GetTickCount();
    r_tests[1][id]=Tick2-Tick;
    printf("(Mysql-Funktion)Dauer: %dms", r_tests[1][id]);
    return 1;
    }

    Ergebnisse:
    [20:07:10] (1): RFT MySql war: 89ms schneller
    [20:07:10] (2): RFT MySql war: 87ms schneller
    [20:07:10] (3): RFT MySql war: 68ms schneller
    [20:07:10] (4): RFT MySql war: 75ms schneller
    [20:07:10] (5): RFT MySql war: 84ms schneller


    Dein Code ist damit bei 1000 MySQL-Abfragen "nur" ~80ms schneller. Es ist also "kein" wirklicher Unterschied erkennbar.


    Desweiteren könnte man noch die Namen der Funktionen ein wenig verbessern.
    "r_mysql_Connect_To_Database" empfinde ich als zu lang.


    Neben der ganzen Kritik gibts natürlich auch ein Lob: Gute Arbeit ;)


    LG Snail


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------



  • Dein Speedtest ist völlig danneben.
    Du lädst in der Schleife immer wieder den "Row" wozu ? Der Sinn der Sache ist doch den Row aus der Tabelle einmal zu laden.
    Und immer wieder per Funktion bis zum ende der Session wiederzugeben.
    So ist es ja wohl klar das mein System nur so ein kleinen Vorteil an geschwindigkeit hat.
    Wieso sollte mein Code einen neuen Query abschicken ? Der Sinn der Sache ist doch so wenig Querys wie möglich zu nutzen um Zeit einzusparen.


    LG RFT



    //Edit: Peinlicher Fehler in meinem Speedtest danke an Snail das er mich drauf aufmerksam macht.
    Allerdings lassen sich die neuen Ergebnisse auch sehen.



    [20:27:43] MySql: Verbindung zur Datenbank: irl wird hergestellt...
    [20:27:43] MySql: Verbindung zur Datenbank: irl erfolgreich hergestellt...
    [20:27:43] (RFT SQL)Dauer: 36ms
    [20:27:44] (Maddin Funktion)Dauer: 348ms
    [20:27:44] (RFT SQL)Dauer: 4ms
    [20:27:44] (Maddin Funktion)Dauer: 351ms
    [20:27:44] (RFT SQL)Dauer: 2ms
    [20:27:44] (Maddin Funktion)Dauer: 348ms
    [20:27:44] (RFT SQL)Dauer: 3ms
    [20:27:45] (Maddin Funktion)Dauer: 354ms
    [20:27:45] (RFT SQL)Dauer: 3ms
    [20:27:45] (Maddin Funktion)Dauer: 344ms
    [20:27:45] Ergebnisse:
    [20:27:45] (1): RFT MySql war: 312ms schneller
    [20:27:45] (2): RFT MySql war: 347ms schneller
    [20:27:45] (3): RFT MySql war: 346ms schneller
    [20:27:45] (4): RFT MySql war: 351ms schneller
    [20:27:45] (5): RFT MySql war: 341ms sch

    RFT