MYSQL Lädt falsche werte

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
  • Hallo
    Bei 3Cordinaten lädt er nur 0000 und zwar bei ax ay az


    for(new hausid2=0;hausid2<HAUSER;hausid2++)
    {
    new query[128];
    format(query,128,"SELECT * FROM `hauser` WHERE `ID` = '%d'",hausid2);
    mysql_query(query);
    mysql_store_result();new resultline[1200];
    new waffenschrank,mp5,desert,shotgun,m4,ak,swanoff,uzi,sniper;
    if(mysql_fetch_row_format(resultline))
    {
    sscanf(resultline,"p|<dsffffffddddddddddddddddddddd>",
    Haus[hausid][ID],
    Haus[hausid][Owner],
    Haus[hausid][ax],
    Haus[hausid][ay],
    Haus[hausid][az],
    Haus[hausid][ix],
    Haus[hausid][iy],
    Haus[hausid][iz],
    Haus[hausid][interior],
    Haus[hausid][vworld],
    Haus[hausid][kosten],
    Haus[hausid][kosten2],
    Haus[hausid][kaufen],
    Haus[hausid][schloss],
    Haus[hausid][heal],
    Haus[hausid][armour],
    Haus[hausid][Type],
    Haus[hausid][Miete],
    Haus[hausid][Mietbar],waffenschrank,mp5,desert,shotgun,m4,ak,swanoff,uzi,sniper,
    Haus[hausid][Bank]);
    printf("%f|%f|%f|%f|%f|%f",Haus[hausid][ax],
    Haus[hausid][ay],
    Haus[hausid][az],
    Haus[hausid][ix],
    Haus[hausid][iy],
    Haus[hausid][iz]);
    }
    else
    {
    break;
    }
    mysql_free_result();
    //printf("ID:%d | Owner:%s | AX:%f | AY:%f | AZ:%f | IX:%f | IY:%f | IZ:%f | Int:%d | VW:%d | KOSTEN:%d | SCORE:%d | KAUFE:%d | SCHLOSS:%d | HEAL:%d | :%d | :%d",Haus[hausid][ID],Haus[hausid][Owner], Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az], Haus[hausid][ix], Haus[hausid][iy], Haus[hausid][iz], Haus[hausid][interior], Haus[hausid][vworld], Haus[hausid][kosten],Haus[hausid][kosten2], Haus[hausid][kaufen], Haus[hausid][schloss], Haus[hausid][heal], Haus[hausid][armour], Haus[hausid][Type]);
    format(cmd,sizeof(cmd),"Besitzer : %s\n Größe : %s\nKosten : %d\nLevel: %d\n/hauskaufen zum kaufen",Haus[hausid][Owner],HausGrosse(hausid),Haus[hausid][kosten],Haus[hausid][kosten2]);
    Haus[hausid][lbl_haus] = Create3DTextLabel(cmd,COLOR_GREEN,Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az]+1,15.0,0);
    UpdateHausInfo(hausid);
    hausid++;
    }


    Die andern werter lädt er komischer weise richtig und ja ax ay az sind floats auch in de Datenbank

  • sscanf(resultline,"p|<dsffffffddddddddddddddddddddd>",
    Du hast < und > falsch gesetzt. Da ist zumindest schon mal 1 Fehler.
    Ich vermute mal du nutzt das Plugin,daher:
    http://forum.sa-mp.com/showthread.php?t=120356
    Schau mal wie dort das p in Verbindung mit <,> und dem Trennzeichen ( in deinem Fall | ) eingesetzt wird.


    Edit:
    Übrigens ist dein Query nicht so gut gewählt mMn.Das WHERE kann man sich sparen und man könnte mit while anstatt if alle Einträge durchgehen mit der Funtion mysql_fetch_row_format().

  • Also in der DB sind 5 Hauser


    [14:20:52] 0|Keiner|1750|-1161|24|226|1023|1084|7|100|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0
    [14:20:52] 1|Gold[X]|1744|-1161|24|226|1023|1084|7|101|1|1|1|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0
    [14:20:52] 2|Keiner|1735|-1161|24|226|1023|1084|7|102|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0
    [14:20:52] 3|Keiner|1726|-1160|24|226|1023|1084|7|103|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0
    [14:20:52] 4|Keiner|1720|-1159|24|226|1023|1084|7|104|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0

  • Und mehr wird da nicht ausgegeben ?
    Alleine schon weil du bei s nicht die größe angibst, müsstest du deine Warnung erhalten.
    sscanf(resultline,"p<|>dsffffffddddddddddddddddddddd",
    Gib dort mal für s die Größe an die bei Owner möglich ist.

  • Deine Positionen sind in deiner Datenbank als INTEGER gespeichert. (1750|-1161|24) <= Integer Werte, da ist kein Komma vorhanden.
    Lässt du es möglicherweise falsch speichern?


    Daher kannst du es höchstens so versuchen:
    sscanf(resultline,"p<|>ds[32]ddddddddddddddddddddddddddd",
    Ob das tut kann ich dir nicht sagen, wäre nur eine Vermutung.

  • Deine Positionen sind in deiner Datenbank als INTEGER gespeichert. (1750|-1161|24) <= Integer Werte, da ist kein Komma vorhanden.
    Lässt du es möglicherweise falsch speichern?


    Daher kannst du es höchstens so versuchen:
    sscanf(resultline,"p<|>ds[32]ddddddddddddddddddddddddddd",
    Ob das tut kann ich dir nicht sagen, wäre nur eine Vermutung.


    Ganz im gegenteil. Sieht zwar aus wie ein INTEGER isses aber nicht es sind floats. In Der Mysql Tabelle Steht auch Float(128.0)

  • Hmm, ich seh grade:
    Haus[hausid][ID],
    Haus[hausid][Owner],
    Haus[hausid][ax],
    usw...


    Deine Schleifen-Variable ist aber hausid2. Ändere doch mal in der Schleife die "hausid" zu "hausid2".
    Wenn das auch nichts ändert, weiß ich nicht weiter. Man könnte den string manuell splitten, anstatt sscanf zu verwenden. Wenn du willst, kann ich dir das kurz machen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • hausid wird unten hochgezahlt und gibt die anzahl der geladenne hauser wieder hausid2 geht bis 500 maximal wenn nur einen zeile nicht gibt wird die schelife gebreakt. deswegen ist es schon so richtig. Kannst mir ja mal manuelsplitten ka wie das geht. Wenn das den fehler behebt

  • new id, name[32], Float:x, Float:y, Float:z, Float:a, interior;
    new string[256];
    format(string, sizeof(string), "0|Keiner|1750|-1161|24|226|1023|1084|7|100|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0");
    printf(string);


    strins(string, "|", strlen(string));
    new oldi=0;
    new count=0;
    for(new i=0; i<strlen(string); i++)
    {
    if(string[i]=='|')
    {
    count++;
    new tmpstring[sizeof(string)]; tmpstring=string;
    strdel(tmpstring, i, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: id = strval(tmpstring);
    case 2: format(name, sizeof(name), "%s", tmpstring);
    case 3: x = floatstr(tmpstring);
    case 4: y = floatstr(tmpstring);
    case 5: z = floatstr(tmpstring);
    case 6: a = floatstr(tmpstring);
    case 7: interior = strval(tmpstring);
    //usw...
    }
    oldi=i;
    }
    }
    printf("id: %d name: %s Pos: %f/%f/%f/%f Int: %d", id, name, x,y,z,a,interior);


    Also so mache ich es mit meinen Abfragen aus Dateien. Ich verzichte bewusst auf MySQL und sscanf.
    string würde bei dir eben das result der MySQL Rückgabe sein.


    Die Schleife musst du eben noch einbauen, und die Variablen mit den richtigen ersetzen, ich hab das nur so gemacht um es zu testen.
    Ich hoffe das hilft dir. Es tut auf jeden Fall:
    [12/08/2013 15:16:16] 0|Keiner|1750|-1161|24|226|1023|1084|7|100|1|1|0|1|0|0|12|0|0|0|0|0|0|0|0|0|0|0|0
    [12/08/2013 15:16:16] id: 0 name: Keiner Pos: 1750.000000/-1161.000000/24.000000/226.000000 Int: 1023