Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4496 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Skriptas:
if(strcmp(cmdtext,"/darbuotojai", true) == 0)
{
new darb[512],result[50],zstatus[15];
mysql_tquery(DbHandle,"SELECT * FROM `zaidejai` WHERE `Darbas` = '4'");
mysql_store_result();
new vardas[25];
while(mysql_retrieve_row())
{
mysql_fetch_field_row(result,"Vardas_Pavarde");
format(vardas,24,"%s",result);
new id = GetPlayeridMid(vardas);
if (IsPlayerConnected(id)) zstatus = "Online";
if (!IsPlayerConnected(id)) zstatus = "Offline";
format(darb,sizeof(darb),"%s - {FF0000}%s\n",vardas,zstatus);
ShowPlayerDialog(playerid,115,DIALOG_STYLE_MSGBOX,"Prisijungæ darbuotojai",darb,"Tæsti","");
}
return true;
}

mysql_log:

[19:15:44] [DEBUG] mysql_tquery - connection: 1, query: "SELECT * FROM `zaidejai` WHERE `Darbas` = '4'", callback: "(null)", format: "(null)"
[19:15:44] [DEBUG] cache_get_row_count - connection: 1
[19:15:44] [WARNING] cache_get_row_count - no active cache
[19:15:44] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:15:44] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.735 milliseconds
[19:15:44] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving 

mysql table turi Vardas_Pavarde ir Darbas laukelius, 2 vartotojai yra sukūrti ir abiejų 'Darbas' yra nustatytas į 4, bet dialog langas neatsiranda suvedus komandą. Ką padariau negerai?

 

Galima paklausti kokia versiją naudoji? 

 

mysql_tquery siunčia threaded užklausą... Todėl turi nurodyti callback'ą kurį ji turi iškviesti grįžus....

 

Iš tavo log'o tai aiškiai matyti, pažiūrėk savo kode eilės tvarką: pirmiausia išsiunti užklausą, tada naudoji mysql_retrieve_row(gilumoje ji kviečia cache_get_row_count() ), o log'e tvarka keičiasi.

 

 

-------------- Sprendimas -----------

 

Turi du variantus. 

 

1. Siųsti threaded užklausą ir rodyti lentelę grįžus užklausai:

if(strcmp(cmdtext,"/darbuotojai", true) == 0)
{
	mysql_tquery(DbHandle,"SELECT * FROM `zaidejai` WHERE `Darbas` = '4'","PakrovusDarbuotojus","i",playerid);
	return true;
}
forward PakrovusDarbuotojus(playerid);
public PakrovusDarbuotojus(playerid)
{
	new vardas[25], darb[512],result[50],zstatus[15];
	for(new i; i < cache_get_row_count(); i++)
	{
		cache_get_field_content(i,"Vardas_Pavarde",vardas);
		new id = GetPlayeridMid(vardas);
		if (IsPlayerConnected(id)) zstatus = "Online";
		if (!IsPlayerConnected(id)) zstatus = "Offline";
		format(darb,sizeof(darb),"%s%s - {FF0000}%s\n",darb,vardas,zstatus);
	}
	ShowPlayerDialog(playerid,115,DIALOG_STYLE_MSGBOX,"Prisijungæ darbuotojai",darb,"Tæsti","");
	return 1;
}

2. Siųsti unthreaded užklausą, panašiai kaip tu bandei daryti:

if(strcmp(cmdtext,"/darbuotojai", true) == 0)
{
	new darb[512],zstatus[15];
	new Cache:result = mysql_query(DbHandle,"SELECT * FROM `zaidejai` WHERE `Darbas` = '4'");
	new vardas[25];
	for(new i; i < cache_get_row_count(); i++)
	{
		cache_get_field_content(i,"Vardas_Pavarde",vardas);
		new id = GetPlayeridMid(vardas);
		if (IsPlayerConnected(id)) zstatus = "Online";
		if (!IsPlayerConnected(id)) zstatus = "Offline";
		format(darb,sizeof(darb),"%s%s - {FF0000}%s\n",darb,vardas,zstatus);
	}
	ShowPlayerDialog(playerid,115,DIALOG_STYLE_MSGBOX,"Prisijungæ darbuotojai",darb,"Tæsti","");
	cache_delete(result);
	return true;
}
  • Teigiamai 2

Reikia Pawn pagalbos? Skype nerašyk.

 

 

 

 

 

 

 

Galima paklausti kokia versiją naudoji? 

 

mysql_tquery siunčia threaded užklausą... Todėl turi nurodyti callback'ą kurį ji turi iškviesti grįžus....

 

Iš tavo log'o tai aiškiai matyti, pažiūrėk savo kode eilės tvarką: pirmiausia išsiunti užklausą, tada naudoji mysql_retrieve_row(gilumoje ji kviečia cache_get_row_count() ), o log'e tvarka keičiasi.

 

 

-------------- Sprendimas -----------

 

Turi du variantus. 

 

1. Siųsti threaded užklausą ir rodyti lentelę grįžus užklausai:

if(strcmp(cmdtext,"/darbuotojai", true) == 0)
{
	mysql_tquery(DbHandle,"SELECT * FROM `zaidejai` WHERE `Darbas` = '4'","PakrovusDarbuotojus","i",playerid);
	return true;
}
forward PakrovusDarbuotojus(playerid);
public PakrovusDarbuotojus(playerid)
{
	new vardas[25], darb[512],result[50],zstatus[15];
	for(new i; i < cache_get_row_count(); i++)
	{
		cache_get_field_content(i,"Vardas_Pavarde",vardas);
		new id = GetPlayeridMid(vardas);
		if (IsPlayerConnected(id)) zstatus = "Online";
		if (!IsPlayerConnected(id)) zstatus = "Offline";
		format(darb,sizeof(darb),"%s%s - {FF0000}%s\n",darb,vardas,zstatus);
	}
	ShowPlayerDialog(playerid,115,DIALOG_STYLE_MSGBOX,"Prisijungæ darbuotojai",darb,"Tæsti","");
	return 1;
}

2. Siųsti unthreaded užklausą, panašiai kaip tu bandei daryti:

if(strcmp(cmdtext,"/darbuotojai", true) == 0)
{
	new darb[512],zstatus[15];
	new Cache:result = mysql_query(DbHandle,"SELECT * FROM `zaidejai` WHERE `Darbas` = '4'");
	new vardas[25];
	for(new i; i < cache_get_row_count(); i++)
	{
		cache_get_field_content(i,"Vardas_Pavarde",vardas);
		new id = GetPlayeridMid(vardas);
		if (IsPlayerConnected(id)) zstatus = "Online";
		if (!IsPlayerConnected(id)) zstatus = "Offline";
		format(darb,sizeof(darb),"%s%s - {FF0000}%s\n",darb,vardas,zstatus);
	}
	ShowPlayerDialog(playerid,115,DIALOG_STYLE_MSGBOX,"Prisijungæ darbuotojai",darb,"Tæsti","");
	cache_delete(result);
	return true;
}

Panaudojau pirmąjį metodą, kadangi esu jį naudojęs ir kitur. Naudoju R38. Dėkui

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4496 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...