Sziasztok! Van egy kocsi lementő szkriptem, és szeretném a segítségeteket kérni. Tökéletesen lementi a dolgokat, de sajna az \"adatadas\" function már nem igazán. Leszögezném, kezdő vagyok MySQL-be. Itt a kód:
CMD:vehicle(playerid, params[])
{
if(Belepve[playerid] == true)
{
if(pInfo[playerid][Adminszint] == 4)
{
new parameter[40];
new string52[2048];
new vehid,vehc1,vehc2,vehmodel;
new Float: vehx, Float:vehy,Float:vehz,Float:veha;
vehid = GetPlayerVehicleID(playerid);
vehmodel= GetVehicleModel(vehid);
GetVehiclePos(vehid, vehx, vehy,vehz);
GetVehicleZAngle(vehid, veha);
GetVehicleColor(vehid, vehc1, vehc2);
if(sscanf(params, \"%s[40]\", parameter)) return SendClientMessage(playerid, -1, \"Használat:/vehicle [save/delete/edit]\");
{
if(IsPlayerInAnyVehicle(playerid))
{
if(isnull(vInfo[vehid][tulaj]))
{
SendClientMessage(playerid, -1, \"Nem létezett, lementve\");
format(string52, sizeof string52, \"INSERT INTO jarmuvek(ID,modelid,vx,vy,vz,va,vcolor1,vcolor2,tulaj) VALUES (\'\', %d, %f, %f, %f, %f, %d, %d, \'Admin\')\",vehmodel, vehx,vehy,vehz,veha,vehc1, vehc2);
mysql_tquery(kapcsolat, string52);
new string57[2048];
format(string57, sizeof string57, \"SELECT * FROM jarmuvek WHERE modelid = \'%d\' AND vx = \'%f\' AND vy = \'%f\' AND vz = \'%f\' AND va = \'%f\' AND vcolor1 = \'%d\' AND vcolor2 = \'%d\' AND tulaj = \'Admin\'\",vehmodel, vehx,vehy,vehz,veha,vehc1, vehc2);
mysql_tquery(kapcsolat, string57,\"adatadas\", \"dd\", playerid, vehid);
}
else
{
SendClientMessage(playerid, -1, \"Létezett, felülírva\");
format(string52, sizeof string52, \"UPDATE jarmuvek SET modelid = \'%d\', vx = \'%f\', vy = \'%f\', vz = \'%f\', va = \'%f\', vcolor1 = \'%d\', vcolor2 = \'%d\' WHERE ID = \'%d\'\",vInfo[vehid][modelid], vInfo[vehid][vx],vInfo[vehid][vy],vInfo[vehid][vz],vInfo[vehid][va],vInfo[vehid][vcolor1],vInfo[vehid][vcolor2]);
mysql_tquery(kapcsolat, string52);
}
}
else SendClientMessage(playerid, COLOR_ORANGE, \"Hiba: Járműben kell ülnöd a parancs használatához.\");
}
else SendClientMessage(playerid, COLOR_ORANGE, \"Hiba: Ezt a parancsot te nem használhatod!\");
}
else NoLogin(playerid);
return 1;
}
forward adatadas(playerid,vehicle);
public adatadas(playerid,vehicle)
{
if(cache_get_row_count() == 1)
{
vInfo[vehicle][DBID] = cache_get_field_content_int(0, \"ID\");
vInfo[vehicle][modelid] = cache_get_field_content_int(0, \"modelid\");
vInfo[vehicle][vx] = cache_get_field_content_float(0, \"vx\");
vInfo[vehicle][vy] = cache_get_field_content_float(0, \"vy\");
vInfo[vehicle][vz] = cache_get_field_content_float(0, \"vz\");
vInfo[vehicle][va] = cache_get_field_content_float(0, \"va\");
vInfo[vehicle][vcolor1] = cache_get_field_content_int(0, \"vcolor1\");
vInfo[vehicle][vcolor2] = cache_get_field_content_int(0, \"vcolor2\");
cache_get_field_content(0, \"tulaj\",vInfo[vehicle][tulaj]);
new carstat[2048];
format(carstat, sizeof carstat, \"DBID: %d, ModelID: %d\\nPzX: %f, PzY: %f, PzZ: %f, PzA: %f\\nSzín1: %d, Szín2: %d, Tulaj: %s\",vInfo[vehicle][DBID],vInfo[vehicle][modelid],vInfo[vehicle][vx],vInfo[vehicle][vy],vInfo[vehicle][vz],vInfo[vehicle][va],vInfo[vehicle][vcolor1],vInfo[vehicle][vcolor2],vInfo[vehicle][tulaj]);
SendClientMessage(playerid, -1, carstat);
}
return 1;
}
IG pedig ezt kapom:

Előre köszönöm a segítségeket. :)
format(string52, sizeof string52, \"INSERT INTO jarmuvek(ID,modelid,vx,vy,vz,va,vcolor1,vcolor2,tulaj) VALUES (\'\', %d, %f, %f, %f, %f, %d, %d, \'Admin\')\",vehmodel, vehx,vehy,vehz,veha,vehc1, vehc2);
Itt mintha egy olyan lenne hogy ID, aminek a VALUES-ben az értéke \'\'. Ha AUTO Incrementre van állítva, akkor nem kell ide beírni az ID-t. De nem ez a fő gond szerintem.
Ha állításod szerint ez müködik, akkor a SELECT-el van a gond.
Erre az esetre amikor az ID-t az INSERT-ből akarod meghatározni van egy speciális eljárás.
Lérehozol egy Cache- változót, amibe eltárolja a query eredményét. VISZONT ehhez sima query-t kell használni mivel threadednél máshogy megy.
new Cache:eredemeny = mysql_query(SQL,query);
Illetve fontos, hogy nem kell megadni callback paramétert, hanem csak a (kapcsolat,formázott_query);
hogyha ez megvan, akkor a cache aktiv állapotban van, így kitudod belőle szedni, az insert értéket.
new id = cache_insert_id();
vInfo[id][DBID] = id;
cache_delete(Cache:eredmeny);
Ezzel a funkcióval letudod kérdezni, a sima querynél lefutó INSERT-ből szármozó AUTO INCREMENT értéket, ami kell neked. Ezt beletölted a változóba, majd utána FONTOS, hogy töröld a cache-t mivel akkor elfog tolódni cache szám, amiből lehetnek később gondok;
Ha ez megvan akkor már tudsz, SELECT query-t küldeni ahol ID-re hivatkozol.
Nemvagyok benne biztos, de talán a cache-n belül is tudsz lekérdezni adatokat, próbáld meg azt előszőr, hogy ezalá a sor alá ->
new id = cache_insert_id();
beraksz még valami betöltést.
cache_get_value_name_int(0,\"Model\",vInfo[id][vModel]);
vagy hasonló képpen. DE ez nembiztos, hogy müködik nem próbáltam 50-50 az esélye, ha nem megy akkor próbáld meg SELECT-elni.
A MÁSIK FONTOS DOLOG AMIT ÉSZREVETTEM!
ilyeneket ne csinálj te fiú, mert elfogy a ramod. string52[2048],string57[2048], ezek egyenként nagyjából 4-5 KB-t esznek a ramból, ami 100-200 ilyennél már majdnem 1 MB, ami sok.
Csinálj egy query változót, egy globálisat.
new query[2048];
És ezt formázgatod, ha kell valahol, fölösleges több ilyet létrehozni. Mivel formázod, ezért úgyis \"resetelődik\" magától, úgyhogy nó para.
Ez így müködik én mint a józsef városi piacon szerzett okleveles scriptertudásom által képzett programozólógus, garantálom hogy jó lesz.
ha kell még help írj, de én ilyen hosszú posztokat írok szóval ne legyél lusta elolvasni, mert különben nem lesz jó
pacsi