Beiträge von J0a9

    Ich habe mal paar Spalten gerade umbenannt, sonst verwecksle ich was :D


    Screenshot:
    Screenshot (185).png


    Ladefunktion:

    for(new i = 0; i < MaxVeh; i++){ new Float: X, Float: Y, Float: Z; GetVehiclePos(i, X, Y, Z); format(query, sizeof(query), "UPDATE fahrzeuge SET PosX = '%f', PosY = '%f', PosZ = '%f' WHERE id ='%i';", X, Y, Z, i) mysql_function_query(dbhandle, query, false, "", "");}

    Ich habe diesbezüglich ein Problem @Jeffry.
    Es wird nicht gespeichert...


    Folgendes hat der Printer ausgeschrieben:

    Code
    [12:31:02] UPDATE fahrzeuge SET PosX = '0.000000', PosY = '0.000000', PosZ = '0.000000' WHERE CarModel = '0'
    [12:31:02] UPDATE fahrzeuge SET PosX  = '1461.199951', PosY  = '-2224.800048', PosZ = '13.300000' WHERE CarModel = '1'
    [12:31:02] UPDATE fahrzeuge SET PosX  = '1457.800048', PosY  = '-2224.699951', PosZ = '13.300000' WHERE CarModel = '2'
    [12:31:02] UPDATE fahrzeuge SET PosX  = '1454.500000', PosY  = '-2224.699951', PosZ = '13.300000' WHERE CarModel = '3'


    Diese "1,2,3" sind komisch, denn in der Datenbank sind die Spalten "ID, Carmodel" nicht auf 1-3.
    Das verwirrt mich gerade etwas ...

    Brauchst du nicht, solltest du aber so machen. Ohne eine Schleife wäre es bischen viel schreibarbeit:
    new Float:x,Float:y,Float:z;GetVehiclePos(1,x,y,z);//speichernGetVehiclePos(2,x,y,z);//speichernGetVehiclePos(3,x,y,z);// speichern ... bis MAX_VEHICLES - 1

    Ahhhh ja kk das wäre wirklich schreibarbeit...
    Wenn ich jetzt eine Schleife machen würde ginge es eventuell so?


    Code
    for(new x = 0; x < MaxVeh; x++)
    {
    	new Float: X, Float: Y, Float: Z;
    	GetVehiclePos(/* Was müsste ich hier einsetzen? */, X, Y, Z);
    
    	format(query, sizeof(query), "UPDATE fahrzeuge (PosX, PosY, PosZ) VALUES ('%f', '%f', '%f') WHERE Name ='%s');", X, Y, Z, SpielerName(playerid))
    	mysql_function_query(dbhandle, query, false, "", "");
    }

    Mit "GetVehiclePos" kann man ja die Fahrzeugpositionen herausfinden, wenn man im Fahrzeug ist.
    Ich möchte aber das beim Timer alle Fahrzeugpositionen abspeichert, egal ob man im Fahrzeug sitzt oder nicht.
    Brauche ich dafür eine Schleife?

    ah okey danke :)


    Folgendes habe Meldung habe ich erhalten als ich die Datenbank bearbeiten wollte:
    "#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key"


    So dachte, da es nur 3 Spalten sind erstelle ich die neu und wenn ich bei Grund Primary Key eingebe und auf Speichern klicke kommt folgendes:
    "#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key"



    Ähm was habe ich denn falsch gemacht?
    Habe sogar bei Grund da es ein var(char) ist die Länge angegeben. Soweit ich weiß kann es nur ein Primary Key geben?

    Soll eine Meldung ausgegeben werden, wenn die Kombination bereits existiert?

    Wenn möglich nein, aber für Testzwecke erstmal ja damit ich sehen & prüfen kann ob's gespeichert wurde.
    Sehe grad habe das vergessen :3

    Hallo Breadfish-Community,


    ich würde gerne Daten speichern, das Problem ist nur ich möchte in einer MySQL Statementabfrage einbauen das er prüft ob der Spieler und der Grund bereits vorhanden ist.
    Sollte ein Enum erstellt werden falls dies nicht gehen sollte habe ich auch schon versucht bekomme aber ständig eine Fehlermeldung die ich mir nicht erklären kann was falsch sei.


    Zunächst erstmal was ich als 1. Versucht habe:


    Code
    new query1[900];
    format(query1, sizeof(query1), "INSERT INTO log SET Spielername='%s', Grund = 'Test' WHERE Spielername != '%s'", SpielerName(playerid);
    print(query1);
    mysql_function_query(dbhandle, query1, false, "", "");



    Wenn ich das "WHERE Spielername != '%s'" weglasse wird das wunderbar gespeichert aber der es werden für den Spieler immer neue Zeilen angelegt.
    Gestern hatte ich im Allgemeinen Scripting Frage gefragt ob dies möglich sei, @Jeffry postete diese Seite http://dev.mysql.com/doc/refma…/insert-on-duplicate.html.
    Ich verstehe nur nicht wie ich "ON DUPLICATE KEY UPDATE" einfüge, denn dieses Update am ende verwirrt mich ein wenig obwohl ich nichts Updaten haben möchte....



    Meine andere Variante war, da ich die Daten später ebenfalls auflisten lassen möchte und dafür ein Enum brauche so aufzubauen:



    Code
    enum LogAkte {
    	l_akte_id,
    	l_akte_name[56],
    	l_akte_grund[100]
    };
    new LogInfo[10][LogAkte];



    Und so:


    ( Hier bekomme ich eine Fehlermeldung das angeblich "SpielerName" und "str1" nicht gefunden werden konnte... )




    Da ich soweit nicht großartig mit den MySQL Statements gearbeitet habe außer "SELECT/UPDATE/INSERT" komme ich hier nicht weiter...
    Kann mir einer weiterhelfen? ( @Jeffry ? )

    Danke für die Antworten!
    Ich werde es morgen mal testen, sollte ich nochmals Hilfe brauchen sende ich den dazugehörigen code.
    Versuche es erst selbst und denn falls ich nicht mehr durchblicke oder weiter weiß poste ich es hier :)

    ich habe mal eine Frage bezüglich des MySQL's.
    Frage lautet: Ist es möglich in der MySQL abfrage einzubauen das er prüft ob der Spieler bereits einen Dateneinsatz hat?
    Nicht das alles doppelt drinne ist?


    geht dies oder muss ich anderes vorgehn?
    da bin ich grad etwas übefragt :D

    Burak, nichts für ungut, ich merke du bist relativ neu was pawn scripting angeht.
    Schau dir bitte erst die Grundlagen an.


    Wie die anderen schon bereits schrieben wird keiner hier dir alles vor Scripten!
    Nicht böse gemeint, aber wie ich das rauslese hast du noch keine Ahnung was wohin muss, schau dir wie gesagt die Grundlagen an etc ;)

    Dann hat es sich wohl über Nacht von selbst behoben :fun:
    Hatte ich auch schon, dass etwas was am ersten Tag nicht ging am anderen Tag plötzlich, ohne dass man etwas daran geändert hat, ging. Umso besser!
    Falls nochmals Probleme auftreten sollten, sage einfach Bescheid (am besten du postest dann die Prints gleich dazu).

    Mache ich, und dir ein dickes Dankeschön das du mir geholfen hast! :thumbup::thumbup:

    Ich verstehe es nicht ich habe nun manuell 11 Tickets in die Datenbank gesetzt.


    folgendes zeigt wird geprintet:

    Code
    [17:45:40] ID: 1
    [17:45:40] ID: 2
    [17:45:40] ID: 3
    [17:45:40] ID: 4
    [17:45:40] ID: 5
    [17:45:40] ID: 6
    [17:45:40] ID: 7
    [17:45:40] ID: 8
    [17:45:40] ID: 9
    [17:45:40] ID: 11



    Hier klappt es, aber gestern wo bestandene Tickets vorhanden waren ging es nicht...

    ja es wird in den Logs ausgeschrieben.
    Das Ding ist als ich den neuen Code von dir eingefügt habe und getestet habe waren in der Datenbank 10 Tickets geschrieben.
    So ich dachte ich erstelle Manuell in der Datenpank nochmal 10 damit ich das testen kann nicht das die ID's vertauscht werden oder nicht gelöscht wird.
    Die die ich Manuell hinzugefügt habe oder auch ingame 1 Ticket erstellt habe konnte ich löschen aber die davor gingen einfach nicht weg.
    Unter den Tickets wurden die aufgelistet, konnte diese nicht löschen... Ich kann mal schaun ob diese Angenommen werden können.



    Das komische ist für mich selbst das ich keinen Text ausgeschrieben bekomme es kommt einfach nichts!
    Keine Fehlermeldung oder sonstiges!
    ich kann zur not wieder Screenshots machen...

    Ja


    Beim laden hat sich eigentlich nichts verändert, ich schreibe sie trotzdem mal hier rein:


    Code
    Function LoadTickets()
    {
        for(new i = 0; i < sizeof(TicketInfo); i++) TicketInfo[i][t_id] = 0;
    	new query[56];
    	format(query, sizeof(query), "SELECT * FROM ingameticket");
    	mysql_function_query(dbhandle, query, true, "LoadSupport", "");
    	return 1;
    }




    Ticket schreiben:

    @Jeffry,


    ich habs mal getestet die davor geschriebenen Tickets gelöscht und neu erstellen lassen dann gings wieder.
    Keine Ahnung was vorhin loswar, ist aber behoben!


    Dank für deine Hilfe! ;)



    //Edit:
    So ich habe mal mit dem Crashdetect geprüft es kommt kein Fehler.
    Wenn ich den Server restarte und Tickets noch vorhanden sind kann ich die danach nicht mehr löschen, sprich nur die Ticket-ID's die neu hinzugefügt wurden...
    Komisch...

    Danke @Jeffry hat soweit funktioniert mit dem aktualisieren der Liste,
    nur wenn ich 2 Tickets lösche kann ich keine weitere mehr löschen, es erscheint auch keine Nachricht ob es erfolgreich oder fehlgeschlagen ist...


    bei DIALOG_TICKET_LOESCHEN müsste glaube ich noch etwas falsch sein...
    Eine Frage noch, was ich nicht verstanden habe warum bei LoadTickets eine Schleife kommt?



    also diese hier:


    Code
    for(new i = 0; i < sizeof(TicketInfo); i++) TicketInfo[i][t_id] = 0;

    Klar ^^ @Jeffry


    Also mein Problem ist ich hab ein Befehl erstellt was nur Admins aufrufen können und dort alle gesendeten Tickets aufgelistet werden sollen.
    Da ist das Problem das die Tickets nicht richtig angezeigt werden.
    Wenn ich aber Tickets löschen möchte geht das nur einmal und dann wird die auflistung nicht mehr aktualisiert.


    Hier die aktuellen Codes:


    Code: Enum
    enum tTicketInfo {
    	t_id,
    	t_betreff[30],
    	t_absender[30],
    	t_grund[35],
    	t_created
    };
    new TicketInfo[50][tTicketInfo];



    Code
    Function LoadTickets()
    {
    	new query[56];
    	format(query, sizeof(query), "SELECT * FROM ingameticket");
    	mysql_function_query(dbhandle, query, true, "LoadSupport", "");
    	return 1;
    }


    Datenladen:


    Befehl:


    Und hier löschen:


    ( Ich hab versucht alles Printen zu lassen, hat auch alles geklappt aber wird trotzdem nicht neugeladen :/ )


    Lade mal hier 2 Screens hoch ( nicht wundern beim eintragen manuell hab ich das erste bisschen fail eingetragen aber darum geht es nicht sondern das es nicht aktualisiert wird... )
    sa-mp-029.png
    ( vor dem löschen )


    sa-mp-033.png
    ( nach dem löschen )
    Aufeinmal ist die ID 5 doppelt...

    Tut mir Leid, habe das Thema nicht mehr gesehen.Wo lag denn der Fehler? :)


    Nicht schlimm ^^
    Der Fehler lag darin das ich beim löschen des Tickets nicht den Wert 0 eingetragen habe.


    Also beim Löschen folgendes:

    Code
    TicketInfo[i][t_id] = 0;


    und dann Datenneuladen lassen.
    Sicherheitshalber habe ich noch beim Auflisten der Tickets folgendes eingebaut in der Loop-Schleife:


    Code
    if(TicketInfo[i][t_id] == 0) continue;


    Damit wurde das Problem behoben und beim Auflisten wird nichts mehr doppelt angezeigt.



    //Edit:
    Problem doch nicht gelöscht...
    Wenn es nur ein Ticket gibt wird es gelöscht, sobald 2 Tickets gibt wird es falsch angezeigt...


    @Jeffry, kannst du vielleicht rüberschaun?