Häuser Daten updaten

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
  • Hast du das jetzt nicht so gemacht, wie Shyim und ich es dir erklärt haben?
    Dann wird das Haus nur neu erstellt, wenn auch ein Update stattgefunden hat, und das dürfte ja recht selten der Fall sein.

    Hatte ich zuerst nun nicht gemacht da dort der Server bei komplett gecrasht ist wie ich es hatte.


    Nun wiededr eingefügt, server startet




    forward HausUpdate(id);
    public HausUpdate(id)
    {
    new query[128];
    format(query, sizeof(query),"SELECT * FROM haus WHERE update = 1");
    mysql_tquery(handle, query, "HausUpdat");
    print(query);
    return 1;
    }


    print gibt folgendes aus


    [19:54:49] SELECT * FROM haus WHERE update = 1


    [20:45:56] [ERROR] mysql_tquery: callback error: parameter count does not match format specifier length (E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\gamemodes\beispiel.pwn:2926)


    Häuser mit der id 1 in update werden nicht geupdatet.

  • Ja hatte ich geändert da es mir auch noch aufgefallen ist das es ein pquery ist



    forward HausUpdat();
    public HausUpdat()
    {
    new num_rows, hid, tmp_name[MAX_PLAYER_NAME], id;
    cache_get_row_count(num_rows);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    cache_get_value_name_int(i, "id", hid);
    id=getHausID(hid);
    if(id == -1) continue; //Haus existiert nicht
    cache_get_value_name_float(i, "h_x", hInfo[id][h_x]); //Float
    cache_get_value_name_float(i, "h_y", hInfo[id][h_y]); //Float
    cache_get_value_name_float(i, "h_z", hInfo[id][h_z]); //Float
    cache_get_value_name_float(i, "ih_x", hInfo[id][ih_x]); //Float
    cache_get_value_name_float(i, "ih_y", hInfo[id][ih_y]); //Float
    cache_get_value_name_float(i, "ih_z", hInfo[id][ih_z]); //Float
    cache_get_value_name_int(i, "h_interior", hInfo[id][h_interior]); //Float
    cache_get_value_name(i, "besitzer", hInfo[id][h_besitzer]); //Float
    strmid(hInfo[id][h_besitzer], tmp_name, 0, sizeof(tmp_name), sizeof(tmp_name));
    cache_get_value_name_int(i, "h_preis",hInfo[id][h_preis]); //Float
    updateHaus(id);
    }
    return 1;
    }


    Jetzt kommt folgender Error



    [21:20:55] [plugins/mysql] X (E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\gamemodes\beispiel.pwn:2920)

  • Das passt, da dürfte kein Fehler auftreten. Kannst du bitte versuchen den Fehler nachzustellen?
    Eventuell hat es sich durch deine Änderung bereits erledigt.


    Zu dem neuen Fehler:
    Prüfe bitte alle im Code angegebenen Spalten der Tabelle und die Bezeichner, ob dies alles mit der Datenbank übereinstimmt.

  • Ich hatte einen Fehler im Code den ich hier nicht gepostet hatte der den Fehler verursacht hatte.



    Einmal hier der aktuelle Code



    forward HausUpdate(id);
    public HausUpdate(id)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM haus WHERE update = 1",id);
    mysql_pquery(handle, query, "HausUpdat","",id);
    print(query);
    return 1;



    }

  • forward HausUpdate(id);public HausUpdate(id){ new query[128]; format(query,sizeof(query),"SELECT * FROM haus WHERE update = 1",id); mysql_pquery(handle, query, "HausUpdat","",id); print(query); return 1;}

    Wozu am Ende von format dieses "id" ?


    und müsstest du in der mysql_pquery nicht sowas wie "i" im vorletzten Argument stehn haben wenn du danach id verwenden willst?

  • Bleibt alles leider ohne Erfolg.


    OnGameModeInit


    SetTimer("HausUpdate",1000,true); // Häuser updaten


    Code der von Timer abgefragt wird

    forward HausUpdate();
    public HausUpdate()
    {
    mysql_pquery(handle, "SELECT * FROM haus WHERE update = 1", "HausUpdat","");
    return 1;
    }




    forward HausUpdat();
    public HausUpdat()
    {
    new num_rows, hid, tmp_name[MAX_PLAYER_NAME], id;
    cache_get_row_count(num_rows);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    cache_get_value_name_int(i, "id", hid);
    id=getHausID(hid);
    if(id == -1) continue; //Haus existiert nicht
    cache_get_value_name_float(i, "h_x", hInfo[id][h_x]); //Float
    cache_get_value_name_float(i, "h_y", hInfo[id][h_y]); //Float
    cache_get_value_name_float(i, "h_z", hInfo[id][h_z]); //Float
    cache_get_value_name_float(i, "ih_x", hInfo[id][ih_x]); //Float
    cache_get_value_name_float(i, "ih_y", hInfo[id][ih_y]); //Float
    cache_get_value_name_float(i, "ih_z", hInfo[id][ih_z]); //Float
    cache_get_value_name_int(i, "h_interior", hInfo[id][h_interior]); //Float
    cache_get_value_name(i, "besitzer", hInfo[id][h_besitzer]); //Float
    strmid(hInfo[id][h_besitzer], tmp_name, 0, sizeof(tmp_name), sizeof(tmp_name));
    cache_get_value_name_int(i, "h_preis",hInfo[id][h_preis]); //Float
    updateHaus(id);
    }
    return 1;
    }

  • Ohja gibt er



    [14:23:39] [plugins/mysql] error #1064 while executing query "SELECT * FROM haus WHERE update = 1": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'update = 1' at line 1 (E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\gamemodes\beispiel.pwn:2916)


    Die spalte update ist in haus mit sicherheit drin


    // Edit funktioniert fast.


    Die Tabelle update ist für phpmyadmin reserviert wodurch ich diese nicht abrufen kann.


    Nun kann ich die 1 bei den Häusern eintragen. Allerdings updatet er dann nur den ersten den er mit der 1 findet und nicht den 2.


    Das wäre auch schön wenn er alle mal durchfragt und updatet


    Hinzu bekomme ich nun folgendes in der Server.log angezeigt



    [15:10:46] [MySQL] Verbindungsaufbau...
    [15:10:47] [MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: 1
    [15:10:47] Number of vehicle models: 23
    [15:10:49] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [15:10:49] [debug] Stack pointer (STK) is 0xBF5B50, heap pointer (HEA) is 0xBF5C50
    [15:10:49] [debug] AMX backtrace:
    [15:10:49] [debug] #0 ???????? in public HausUpdat ()
    [15:10:52] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [15:10:52] [debug] Stack pointer (STK) is 0xBF5B50, heap pointer (HEA) is 0xBF5C50
    [15:10:52] [debug] AMX backtrace:
    [15:10:52] [debug] #0 ???????? in public HausUpdat ()
    [15:10:53] [debug] Server received interrupt signal while executing beispiel.amx
    [15:10:53] [debug] AMX backtrace:
    [15:10:53] [debug] #0 native mysql_pquery () [5e92e710] from mysql.DLL
    [15:10:53] [debug] #1 000388d4 in public HausUpdate () at E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\gamemodes\beispiel.pwn:2916
    [15:10:53] [debug] System backtrace:
    [15:10:53] [debug] #0 687108e1 in ?? () from E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\plugins\crashdetect.DLL
    [15:10:53] [debug] #1 68712806 in ?? () from E:\Projekte 2016\SAMP-Projekte\crass-gaming.eu\Server\16.11.2016\mysql-R41-win32\plugins\crashdetect.DLL
    [15:10:53] [debug] #2 7790347f in ?? () from C:\WINDOWS\System32\KERNELBASE.dll
    [15:10:53] [debug] #3 77a462c4 in ?? () from C:\WINDOWS\System32\KERNEL32.DLL
    [15:10:53] [debug] #4 77bc0719 in ?? () from C:\WINDOWS\SYSTEM32\ntdll.dll
    [15:10:53] [debug] #5 77bc06e4 in ?? () from C:\WINDOWS\SYSTEM32\ntdll.dll
    [15:10:53] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [15:10:53] [debug] Stack pointer (STK) is 0xBF5B50, heap pointer (HEA) is 0xBF5C50
    [15:10:53] [debug] AMX backtrace:
    [15:10:53] [debug] #0 ???????? in public HausUpdat ()

    2 Mal editiert, zuletzt von robbi2304 ()




  • forward HausUpdate();
    public HausUpdate()
    {
    mysql_pquery(handle, "SELECT * FROM haus WHERE `update1` = 1", "HausUpdat","");
    return 1;
    }



    [15:40:59] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [15:40:59] [debug] Stack pointer (STK) is 0xBF5B58, heap pointer (HEA) is 0xBF5C58
    [15:40:59] [debug] AMX backtrace:
    [15:40:59] [debug] #0 ???????? in public HausUpdat ()
    [15:41:00] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [15:41:00] [debug] Stack pointer (STK) is 0xBF5B58, heap pointer (HEA) is 0xBF5C58
    [15:41:00] [debug] AMX backtrace:
    [15:41:00] [debug] #0 ???????? in public HausUpdat ()


    Beim Compilen läuft alles Richtig. Alles ohne Errors & Warnings

  • Ändere
    cache_get_value_name(i, "besitzer", hInfo[id][h_besitzer]); //Float
    zu:
    cache_get_value_name(i, "besitzer", tmp_name); //String




    Oder alternativ:


  • Habs so abgeändert wie von dir beschrieben. Allerdings bleiben die Errors. Ebenfalls updatet nur das erste Haus was er mit der id 1 in update 1 findet



    Ich habe nun ebenfalls nochmal jetzt etwas geändert.


    forward HausUpdate();public HausUpdate(){ mysql_pquery(handle, "SELECT * FROM haus WHERE update='1'","HausUpdat",""); return 1;}


    Errors sind dadurch weg. Aber scheinbar mit der abfrage passt was nicht. Denn nun kann er nicht mehr updaten weil er vermtl die 1 nicht mehr findet.


    Aber vielleicht kriegen wir das ja nochz hin

    2 Mal editiert, zuletzt von robbi2304 ()

  • Was wird dir so im Server Log ausgegeben?
    forward HausUpdat();
    public HausUpdat()
    {
    printf("HausUpdat aufgerufen.");
    new num_rows, hid, tmp_name[MAX_PLAYER_NAME],id;
    cache_get_row_count(num_rows);
    printf("rows: %d", num_rows);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    printf("i: %d", i);
    cache_get_value_name_int(i, "id",hid);
    printf("hid: %d", hid);
    id=getHausID(hid);
    printf("id: %d", id);
    if(id == -1) continue; //Haus existiert nicht
    cache_get_value_name_float(i, "h_x", hInfo[id][h_x]); //Float
    cache_get_value_name_float(i, "h_y", hInfo[id][h_y]); //Float
    cache_get_value_name_float(i, "h_z", hInfo[id][h_z]); //Float
    printf("Koordinaten");
    cache_get_value_name_float(i, "ih_x", hInfo[id][ih_x]); //Float
    cache_get_value_name_float(i, "ih_y", hInfo[id][ih_y]); //Float
    cache_get_value_name_float(i, "ih_z", hInfo[id][ih_z]); //Float
    printf("Koordinaten2");
    cache_get_value_name_int(i, "h_interior", hInfo[id][h_interior]); //Float
    printf("Interior");
    cache_get_value_name(i, "besitzer", tmp_name); //String
    printf("Name: %s", tmp_name);
    strmid(hInfo[id][h_besitzer], tmp_name, 0, sizeof(tmp_name), sizeof(tmp_name));
    printf("Besitzer: %s", hInfo[id][h_besitzer]);
    cache_get_value_name_int(i, "h_preis",hInfo[id][h_preis]); //Float
    printf("Preis: %d", hInfo[id][h_preis]);
    updateHaus(id);
    printf("Updated.");
    }
    printf("Fertig.");
    return 1;
    }

  • Ah warum komm ich nicht selber auf die Idee das zu printen.


    Ich hatte eine Abfrage zuviel in updateHaus(id)


    wodurch der Fehler aufgetreten ist. Nun funktioniert es.


    Danke für deine Mühe und Geduld mit mir @Jeffry



    Eine Frage habe ich allerdings dazu noch, wie setze ich den Wert wieder auf 0 wenn er geupdatet hat ?