Szerző Téma: Járműbetöltés, MySQL + sscanf  (Megtekintve 1057 alkalommal)

Járműbetöltés, MySQL + sscanf
« Dátum: 2016. január 17. - 20:14:31 »
0 Show voters
Hali,
Szeretnék írni 1 dynamikus jármű rendszert, MySQL-es adatbázissal és sccanf2-es olvasással...
(A kódban lévő sorok száma: 124-141)
 
   new query[128], query2[128];
format(query, sizeof(query), \"COUNT * FROM jarmuvek\");
mysql_query(query);
kocsik = mysql_store_result();
//   kocsik = mysql_num_rows();
mysql_free_result();
format(query2, sizeof(query2), \"SELECT * FROM jarmuvek\");
mysql_query(query2);
for(new i=1; i<=kocsik; i++)
{
    new j = i;
mysql_fetch_row_format(rows, \"|\");
sscanf(rows, \"p<|>ic[11]fiffffiiiib[4]b[4]b[4]b[4]iiffffi\", Jarmuinfo[j][iD], Jarmuinfo[j][Rendszam], Jarmuinfo[j][Health], Jarmuinfo[j][Model],  Jarmuinfo[j][PosX], Jarmuinfo[j][PosY], Jarmuinfo[j][PosZ], Jarmuinfo[j][PosA], Jarmuinfo[j][szin1], Jarmuinfo[j][szin2], Jarmuinfo[j][Paintjob], Jarmuinfo[j][Km], Jarmuinfo[j][Panelek], Jarmuinfo[j][Ajtok], Jarmuinfo[j][Lampak], Jarmuinfo[j][Gumik], Jarmuinfo[j][Felnik], Jarmuinfo[j][Tulaj], Jarmuinfo[j][ParkX], Jarmuinfo[j][ParkY], Jarmuinfo[j][ParkZ], Jarmuinfo[j][ParkA], Jarmuinfo[j][Ertek]);
printf(Jarmuinfo[j][iD], Jarmuinfo[j][Rendszam], Jarmuinfo[j][Health], Jarmuinfo[j][Model],  Jarmuinfo[j][PosX], Jarmuinfo[j][PosY], Jarmuinfo[j][PosZ], Jarmuinfo[j][PosA], Jarmuinfo[j][szin1], Jarmuinfo[j][szin2], Jarmuinfo[j][Paintjob], Jarmuinfo[j][Km], Jarmuinfo[j][Panelek], Jarmuinfo[j][Ajtok], Jarmuinfo[j][Lampak], Jarmuinfo[j][Gumik], Jarmuinfo[j][Felnik], Jarmuinfo[j][Tulaj], Jarmuinfo[j][ParkX], Jarmuinfo[j][ParkY], Jarmuinfo[j][ParkZ], Jarmuinfo[j][ParkA], Jarmuinfo[j][Ertek]);
mysql_free_result();
}
return 1;

 
*a kocsik változó globális..
Na most az én kódom túl hosszú és nem a legjobb..
A fordító a következő hibákat dobta:
 
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(129) : error 035: argument type mismatch (argument 1)
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(137) : error 075: input line too long (after substitutions)
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(138) : error 017: undefined symbol \"Jarmui\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : warning 217: loose indentation
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 017: undefined symbol \"nfo\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : warning 215: expression has no effect
C:\\Users\\P*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 001: expected token: \";\", but found \"]\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 029: invalid expression, assumed zero
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase
 
7 Errors.

 
Na mint látható az a bizonyos sor túl hosszú... pedig még lenne több adat amit bekéne töltenem.
(Szerk.: Hogyan tudnám megoldani, hogy jó legyen? Ha az enum paramétereit elhagyom és rövidebb változókat írnék a sorba, akkor is hosszú lenne.)
Ezen felül pár kérdés:
Melyik a jó?
 
  •    kocsik = mysql_store_result();
    kocsik = mysql_num_rows();


   
A carid-t 0-tól vagy 1-től számolja a samp?
« Utoljára szerkesztve: 2016. január 17. - 22:54:33 írta anGeL »

Járműbetöltés, MySQL + sscanf
« Válasz #1 Dátum: 2016. január 17. - 22:38:59 »
0 Show voters
Először ajánlom a legujabb, nem tudom hányas mysql verziót.
2. Hozz létre egy táblát, adj neki nevet és mindegyik valtozonak adj meg egy külön sort.
Pl. a rendszamnak egy 32 karakter hosszú sort
3. A samp 1-tol számolja a jármű idket
//Telo
Ha tudsz várni holnapig, gépről részletesebben és tudok magyarázni.

Járműbetöltés, MySQL + sscanf
« Válasz #2 Dátum: 2016. január 18. - 19:45:49 »
0 Show voters
1. Nem akarok többszálas lekérdezéseket, mert abba még belezavarodok..
2. Az adatbázis már rég megvan, jó is. A pawnoban lévő kóddal kellene valamit kezdenem.

Járműbetöltés, MySQL + sscanf
« Válasz #3 Dátum: 2016. január 26. - 19:31:20 »
0 Show voters
Senki?

Járműbetöltés, MySQL + sscanf
« Válasz #4 Dátum: 2016. január 26. - 19:39:46 »
0 Show voters
Többszálas lekérdezés nélkül nehéz lesz úgy, hogy még az egy sorban megadott karakter határon belül légy..

Járműbetöltés, MySQL + sscanf
« Válasz #5 Dátum: 2016. január 28. - 13:28:43 »
0 Show voters
Zsoltnak igaza van!
Szedd le a legújabb mysqlt, sokkal egyszerűbb, mutatom is a saját példámat.
Rögtön az elejére kell egy enum amibe lekéred az adatokat!
 

enum Car{
ID,
db_id,
rszam[8],
modelid,
Float:xPos,
Float:yPos,
Float:zPos,
Float:angle,
tulaj,
col1,
col2
}
new CarInfo[MAX_VEHICLES][Car];

 


new kapcs, query[2000];    //Ez megy a mod elejére
 
public OnGameModeInit()
{   
mysql_log(LOG_ALL, LOG_TYPE_HTML);                        //Ezzel minden logolsz ami zajlik a mysqlben HTML fájlba, amit a szerver mappádba tesz
kapcs = mysql_connect(\"localhost\", \"root\", \"zone\", \"\");   //A kapcs nevű változót egyenlővé teszed a mysql connectel amiben megadod az adatb, jelszót stb...
if(mysql_errno(kapcs) != 0) printf(\"MySQL hiba! Hibakód: %d\", mysql_errno(kapcs)); //Ha elhal a mysql akkor printf-eled (pl nincs elindítva az apach vagy valami same things)
mysql_tquery(kapcs, \"SELECT * FROM cars\",\"AutoLoad\");     //Aztán elküldöd a kapcs nevű változóval a kérésedet, amit tovább adsz az AutoLoadnak ami végrehajtja a betöltésed.
return 1;
}

 
Jöhet az AutoLoad valahova szintén a modba
 

forward AutoLoad();
public AutoLoad()
{
if(!cache_get_row_count()) return printf(\"Nincs egy autó sem az adatbázisban!\");   //Ha nincs betöltendő sor akkor ezt írja a fekete ablakba.
for(new i = 0; i < cache_get_row_count(); i++)   //Különben végig nézzük a sorokat egy for-al
{
        new rendszam[8];
cache_get_field_content(i, \"rendszam\", rendszam);                              //Rendszámot csak így tudod betölteni mert stringet nem tudsz olvasni csak int-et meg float-ot
CarInfo[rszam] = rendszam;
CarInfo[modelid] = cache_get_field_content_int(i,\"modelid\",kapcs);    //Innentől meg csak adatbetöltés
CarInfo[tulaj] = cache_get_field_content_int(i,\"tulaj\",kapcs);
CarInfo[xPos] = cache_get_field_content_float(i,\"x\",kapcs);
CarInfo[yPos] = cache_get_field_content_float(i,\"y\",kapcs);
CarInfo[zPos] = cache_get_field_content_float(i,\"z\",kapcs);
CarInfo[angle] = cache_get_field_content_float(i,\"angle\",kapcs);
CarInfo[col1] = cache_get_field_content_int(i,\"col1\",kapcs);
CarInfo[col2] = cache_get_field_content_int(i,\"col2\",kapcs);
                //Ezzel pedig szépen lepakolgatod a kocsit
CarInfo[iD] = AddStaticVehicleEx(CarInfo[modelid],CarInfo[xPos],CarInfo[yPos],CarInfo[zPos],CarInfo[angle],CarInfo[col1],CarInfo[col2],300,0);
AutoCount++;
}
return 1;
}

 
Azt hiszem minden benne van, megéri leszedni a legújabb MySQL-t.
Én így használom ez a saját példám, nem a te kódod alapján írtam, szóval mindenképp módosítanod kell a kódon!
Üdv,
Justrics

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal