Wysłany: 2017-06-10, 00:10
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Cze??, ubolewam si? z pobieraniem informacji z bazy danych.
Ot?? chcia?bym pobra? sobie z bazy list? os?b, kt?rzy s? w tabeli.
Wszystko ?adnie pi?knie, ale gdy robi? tak:
Pawn if( listitem == 0 )
{
new index = 0 ;
format ( query , 256 , "SELECT * FROM pomoc_drogowa" );
mysql_query ( query );
mysql_store_result ();
while( mysql_fetch_row ( query , "|" ))
{
sscanf ( query , "p<|>ds[24]s[50]ddd" ,
PomocDrogowa [ index ][ dUID ],
PomocDrogowa [ index ][ dNick ],
PomocDrogowa [ index ][ dRanga ],
PomocDrogowa [ index ][ dSkin ],
PomocDrogowa [ index ][ dWyplata ],
PomocDrogowa [ index ][ dSzef ]);
format ( str , sizeof ( str ), "%s\n" , PomocDrogowa [ index ][ dNick ]);
}
mysql_free_result ();
ShowPlayerDialog ( playerid , D_MENU_LISTA , DIALOG_STYLE_LIST , "Lista pracownikow [PD]" , str , "Edytuj" , "Anuluj" );
}
To nie do?? ?e dialog otworz? tylko raz i p??niej za Chiny go nie otworz?,
dopiero po restarcie serwera, to jeszcze wczytuje si? tylko jedna osoba,
kt?ra jest ostatnia w tabeli (ma najwi?ksze UID).
Ma ktos jakis pomys? jak mo?na to zrobi? ?
Wysłany: 2017-06-10, 10:15
U123 [Usunięty ]
na ko?cu w p?tli while
[pawn]
index++;
[/pawn]
Więcej szczegółów
Wystawiono 1 piw(a):Grace
Wysłany: 2017-06-10, 10:21
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Mr.Reus , doda?e,m nie dzia?a.
Teraz moj kod wyglada tak, po przerobieniu:
Pawn new stringpracownicy [ 500 ];
mysql_query ( "SELECT * FROM pomoc_drogowa" );
mysql_store_result ();
if( mysql_num_rows () == 0 )
{
// BLAD NIE MA POJAZDOW
}
else
{
for(new i ; i < mysql_num_rows (); i ++)
{
mysql_data_seek ( i );
mysql_fetch_row_data ();
format ( stringpracownicy , sizeof ( stringpracownicy ), "%s\t%s\n" , stringpracownicy , mysql_fetch_string ( "nick" ));
i ++;
}
ShowPlayerDialog ( playerid , D_MENU_LISTA , DIALOG_STYLE_LIST , "Pracownicy Frakcji" , stringpracownicy , "Wybierz" , "Anuluj" );
}
mysql_free_result ();
Tylko ?e teraz, do dialogu dodawaj? si? pola dobrze (bo tyle ile jest danych w bazie tyle opcji w dialogu). Tylko problem jest taki, ze te pola s? puste, czyli s? i moge je zaznaczyc, ale s? puste.
Wysłany: 2017-06-10, 11:47
Combacior
Wiek: 29 Na forum: 5795 dni Posty: 1516
Piwa : 2161
Czego? takiego jest mn?stwo, wystarczy pobra? jaki? rozbudowany skrypt i poszuka?. Przyk?ad ze skryptu starego uG na wy?wietlanie cz?onk?w gangu
Kod: case 4:
{
new list[2048], name[25], rank, online, memberid;
m_query("SELECT uid, name, grang, online FROM Accounts WHERE gang = %d AND grang > -1 ORDER BY grang DESC", gangid);
mysql_store_result();
while(mysql_fetch_row(s, " "))
{
sscanf(s, "is[25]ii", memberid, name, rank, online);
if(online) format(list, 2048, "%s"NEUTRAL"(uID: %d) [%s] [%s] "L_GREEN"[online]\n", list, memberid, name, gangRangName[rank]);
else format(list, 2048, "%s"NEUTRAL"(uID: %d) [%s] [%s] "RED"[offline]\n", list, memberid, name, gangRangName[rank]);
}
mysql_free_result();
if(!gRang[playerid]) ShowPlayerDialog(playerid, D_MYGANG_MEMBERS, D_STYLE_MSG, gName[gangid], list, "Cofnij", "Zamknij");
else ShowPlayerDialog(playerid, D_MEMBERMANAGE, D_STYLE_LIST, gName[gangid], list, "Zarz?dzaj", "Cofnij");
}
Kod nie jest za bardzo optymalny, ale mo?esz si? na nim wzorowa?. Na pocz?tku wyja?nijmy kilka fakt?w.
"xMaslo" napisał/a :format(query,?256,?"SELECT?*?FROM?pomoc_drogowa");
??????????????mysql_query(query);
Po co tutaj funkcja format? Nie ma ?adnych parametr?w, ale widz?, ?e w drugim kodzie ju? jest tak jak by? powinno, wi?c zostawiam.
Potrzebujesz tylko nick gracza z tego zapytania, wi?c dlaczego pobierasz wszystkie warto?ci? Funkcja mysql_fetch_string pobiera dane po?rednio. U?ywaj?c jej, mo?esz pobra? tylko jedn? warto??. Potrzebujesz tylko nick, zatem mo?esz jej u?y?.
Kod: if(listitem == 0)
{
new nick[25];
mysql_query("SELECT nick FROM pomoc_drogowa");
mysql_store_result();
while(mysql_fetch_string(nick))
{
strcat(str, nick);
strcat(str, "\n");
}
mysql_free_result();
ShowPlayerDialog(playerid, D_MENU_LISTA, DIALOG_STYLE_LIST, "Lista pracownikow [PD]", str, "Edytuj", "Anuluj");
}
Kodu nie testowa?em, ale powinien dzia?a?. Popraw sobie nazw? kolumny nicku gracza je?li masz inn?. Zamiast dw?ch funkcji strcat mo?na u?y? jednej format, wedle uznania. Nie polecam te? robi? czego? takiego
Kod: new str[2048];
format(str, 2048, "%s"NEUTRAL"(uID: %d) [%s] [%s] "RED"[offline]\n", str, memberid, name, gangRangName[rank]);
Sam tak kiedy? robi?em, tak jak wida? w kodzie z cz?onkami gangu. Dlaczego nie polecam? Za ka?dym u?yciem funkcji format w p?tli w taki spos?b niepotrzebnie jest formatowany ju? wcze?niej sformatowany tekst. Oczywi?cie, jest to wygodne, ale nieoptymalne. Lepiej do tego u?y? funkcji strcat
Kod: new str[2048], str2[64];
format(str2, sizeof str2, "%s"NEUTRAL"(uID: %d) [%s] [%s] "RED"[offline]\n", str, memberid, name, gangRangName[rank]);
strcat(str, str2);
Oczywi?cie wielko?? tablic te? musisz sobie ustawi?, nie ma potrzeby robi? takich wielkich.
Więcej szczegółów
Wystawiono 1 piw(a):Grace
Wysłany: 2017-06-10, 12:05
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Dalej wychodzi mi to samo, pola s? "puste".
Sprobowalem zaktualizowa? plugin i include, lecz nic mi to nie da?o.
W mysql_log.txt nic niema:
Kod: Function: mysql_query executed: "SELECT * FROM pomoc_drogowa" with result: "0".
[Sat Jun 10 12:01:05 2017] Function: mysql_store_result executed with result: "1"
[Sat Jun 10 12:01:05 2017] Function: mysql_num_rows executed with result: "%".
[Sat Jun 10 12:01:05 2017] Function: mysql_num_rows executed with result: "%".
[Sat Jun 10 12:01:05 2017] Function: mysql_data_seek executed.
[Sat Jun 10 12:01:05 2017] Function: mysql_fetch_row_data executed.
[Sat Jun 10 12:01:05 2017] Function: mysql_fetch_string executed with result: "2".
[Sat Jun 10 12:01:05 2017] Function: mysql_num_rows executed with result: "%".
[Sat Jun 10 12:01:05 2017] Function: mysql_data_seek executed.
[Sat Jun 10 12:01:05 2017] Function: mysql_fetch_row_data executed.
[Sat Jun 10 12:01:05 2017] Function: mysql_num_rows executed with result: "%".
[Sat Jun 10 12:01:05 2017] Function: mysql_free_result executed.
Dodatkowo, serwer mi sie crashuje gdy podczas tych pustych p?l zmieni? z jednego na drugie.
Skrypt mam taki:
Pawn #include <a_samp>
#include <mysql>
#include <sscanf2>
#include <zcmd>
//-------------------------------------------------
#define MYSQL_HOST "ukrywam"
#define MYSQL_LOGIN "ukrywam"
#define MYSQL_HASLO "ukrywam"
#define MYSQL_BAZA "ukrywam"
//-------------------------------------------------
#define D_MENU 12
#define D_MENU_ADD 13
#define D_MENU_DEL 14
#define D_MENU_WYP 15
#define D_MENU_SKIN 16
#define D_MENU_RANGA 17
#define D_MENU_UPRA 18
#define D_MENU_LISTA 19
//-------------------------------------------------
#define MAX_FRAKCJE 20
//-------------------------------------------------
enum dinfo
{
dUID ,
dNick [ 24 ],
dRanga [ 50 ],
dSkin ,
dWyplata ,
dSzef
};
new PomocDrogowa [ MAX_FRAKCJE ][ dinfo ];
//-------------------------------------------------
new query [ 256 ];
new str [ 500 ];
new bool : pracuje [ MAX_PLAYERS ] = false ;
// ------------------------------------------------
main (){}
//-------------------------------------------------
public OnFilterScriptInit ()
{
mysql_init ( LOG_ALL );
mysql_connect ( MYSQL_HOST , MYSQL_LOGIN , MYSQL_HASLO , MYSQL_BAZA );
LoadPomocDrogowa ();
return 1 ;
}
CMD : panel ( playerid , params [])
{
for(new i = 0 ; i < MAX_FRAKCJE ; i ++)
{
if( PomocDrogowa [ i ][ dSzef ] == 1 )
{
ShowPlayerDialog ( playerid , D_MENU , DIALOG_STYLE_LIST , "Zarzadzanie frakcja" ,
"Edytuj pracownikow\nEdytuj pojazdy\nEdytuj baze frakcji" , "Wybierz" , "Anuluj" );
}
}
return 1 ;
}
public OnDialogResponse ( playerid , dialogid , response , listitem , inputtext [])
{
if( dialogid == D_MENU )
{
if( response )
{
if( listitem == 0 )
{
new nick [ 25 ];
mysql_query ( "SELECT nick FROM pomoc_drogowa" );
mysql_store_result ();
while( mysql_fetch_string ( nick ))
{
strcat ( str , nick );
strcat ( str , "\n" );
}
mysql_free_result ();
ShowPlayerDialog ( playerid , D_MENU_LISTA , DIALOG_STYLE_LIST , "Lista pracownikow [PD]" , str , "Edytuj" , "Anuluj" );
}
}
}
return 0 ;
}
CMD : sluzba ( playerid )
{
if( IsPlayerInRangeOfPoint ( playerid , 2 , 844.5335 , 2191.3909 , 10.8663 )) // wejscie do bazy PD
{
if( pracuje [ playerid ] == false )
{
format ( query , 256 , "SELECT * FROM pomoc_drogowa WHERE nick = '%s'" , PlayerName ( playerid ));
mysql_query ( query );
new index = 0 ;
mysql_store_result ();
if( mysql_fetch_row ( query , "|" ))
{
sscanf ( query , "p<|>ds[24]s[50]ddd" ,
PomocDrogowa [ index ][ dUID ],
PomocDrogowa [ index ][ dNick ],
PomocDrogowa [ index ][ dRanga ],
PomocDrogowa [ index ][ dSkin ],
PomocDrogowa [ index ][ dWyplata ],
PomocDrogowa [ index ][ dSzef ]);
SetPlayerSkin ( playerid , PomocDrogowa [ index ][ dSkin ]);
SetTimerEx ( "Wyplata" , 180000 , true , "i" , playerid );
pracuje [ playerid ] = true ;
format ( str , sizeof ( str ), "Zaczynasz sluzbe Pomoc Drogowa: %d$, %s. Komendy /fcmd" ,
PomocDrogowa [ index ][ dWyplata ],
PomocDrogowa [ index ][ dRanga ]);
SendClientMessage ( playerid , - 1 , str );
}
mysql_free_result ();
}
else
{
SendClientMessage ( playerid , - 1 , "Juz pracujesz na sluzbie!" );
}
}
else
{
SendClientMessage ( playerid , - 1 , "{FF0000}Nie nalezysz do tej frakcji!" );
}
return 1 ;
}
// ------------------------------------------------
stock LoadPomocDrogowa ()
{
format ( query , 256 , "SELECT * FROM pomoc_drogowa" );
mysql_query ( query );
new index = 0 ;
mysql_store_result ();
while( mysql_fetch_row ( query , "|" ))
{
sscanf ( query , "p<|>ds[24]s[50]ddd" ,
PomocDrogowa [ index ][ dUID ],
PomocDrogowa [ index ][ dNick ],
PomocDrogowa [ index ][ dRanga ],
PomocDrogowa [ index ][ dSkin ],
PomocDrogowa [ index ][ dWyplata ],
PomocDrogowa [ index ][ dSzef ]);
index ++;
}
mysql_free_result ();
printf ( "\n\n>> Zaladowano poprawnie %d pracownikow pomocy drogowej\n\n" , index );
return 1 ;
}
stock PlayerName ( playerid )
{
new nick [ 24 ];
GetPlayerName ( playerid , nick , sizeof ( nick ));
return nick ;
}
Wysłany: 2017-06-10, 12:25
Combacior
Wiek: 29 Na forum: 5795 dni Posty: 1516
Piwa : 2161
Z log?w wynika, ?e nie przekompilowa?e? skryptu, gdy? nadal s? u?ywane funkcje mysql_data_seek, mysql_fetch_data_row (prawd? m?wi?c nie wiem co robi? te dwie funkcje, w og?le ich nie u?ywam). U mnie dzia?a dobrze
Kod: new nick[25];
mysql_query("SELECT nick FROM abc");
mysql_store_result();
while(mysql_fetch_string(nick))
{
strcat(lString, nick);
strcat(lString, "\n");
}
print(lString);
mysql_free_result();
Struktura
Kod:
--
-- Struktura tabeli dla tabeli `abc`
--
CREATE TABLE IF NOT EXISTS `abc` (
`nick` varchar(24) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Zrzut danych tabeli `abc`
--
INSERT INTO `abc` (`nick`) VALUES
('Comb1'),
('Comb2'),
('Combo13'),
('C123');
Output
Kod: [10.06.2017 12] Comb1
Comb2
Combo13
C123
Co do crash'a, to przed p?tl? while dodaj warunek sprawdzaj?cy, czy s? w og?le jakie? rekordy. Chocia? ja nie dostaj? crash'a, nawet bez ?adnych rekord?w.
Wysłany: 2017-06-10, 12:42
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Jako ?e lista dzia?a, to chcia?bym teraz doda? inne informacje ktore beda wyswietlane w liscie:
Pawn new nick [ 25 ], uid , wyplata ;
format ( query , 256 , "SELECT uid, nick, wyplata FROM pomoc_drogowa" );
mysql_query ( query );
mysql_store_result ();
while( mysql_fetch_row ( query , "|" ))
{
sscanf ( query , "p<|>ds[24]d" , uid , nick , wyplata );
format ( str , sizeof ( str ), "%d\t%s\t%d" , uid , nick , wyplata );
strcat ( str , "\n" );
}
mysql_free_result ();
ShowPlayerDialog ( playerid , D_MENU_LISTA , DIALOG_STYLE_TABLIST , "Lista pracownikow" , str , "OK" , "Anuluj" );
Tak mi dzia?a, pokazuje sie poprawnie UID, Nick, oraz Wyplata. Jednak dalej
jest tylko to, co jest ostatnie w tabeli.
Kod: --
-- Struktura tabeli dla tabeli `pomoc_drogowa`
--
CREATE TABLE `pomoc_drogowa` (
`uid` int(11) NOT NULL,
`nick` varchar(24) NOT NULL,
`ranga` varchar(50) NOT NULL,
`skin` int(11) NOT NULL,
`wyplata` int(11) NOT NULL,
`szef` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Zrzut danych tabeli `pomoc_drogowa`
--
INSERT INTO `pomoc_drogowa` (`uid`, `nick`, `ranga`, `skin`, `wyplata`, `szef`) VALUES
(1, 'Szaman', 'c***', 7, 1000, 1),
(2, 'KamileK.', 'pracownik', 8, 15, 0),
(3, 'Piorun', 'nikt', 8, 10, 0);
Wysłany: 2017-06-10, 14:04
Combacior
Wiek: 29 Na forum: 5795 dni Posty: 1516
Piwa : 2161
Formatujesz g??wn? tablic?, przez co wcze?niejszy rekord zostaje nadpisany i go nie ma. Poda?em wy?ej jak to ma wygl?da?, jedna g??wna tablica + jedna ma?a pomocnicza do formatu
Kod:
new str[2048], str2[64];
format(str2, sizeof str2, "%s"NEUTRAL"(uID: %d) [%s] [%s] "RED"[offline]\n", str, memberid, name, gangRangName[rank]); //format malej tablicy
strcat(str, str2); //pomocnicza tablica dolaczana do glownej
Co to ma by??
Kod: format(query, 256, "SELECT uid, nick, wyplata FROM pomoc_drogowa");
Ile razy mo?na pisa?, ?e nie u?ywa si? funkcji format je?li nie ma si? ?adnego parametru!
Wysłany: 2017-06-12, 23:44
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Ju? sobie poradzi?em, m?j problem polega? w tym, ?e gdy formatowaniem swoj? zmienna, nie dodawa?em tam tej zmiennej kt?ra formatuje ?eby si? wykonywa?a do skutku. Brzmi dziwnie, ale teraz jest dla mnie przynajmniej zrozumia?e.
Tagi: pobieranie :: mysql :: dialog
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: