[Save] Blad w zapytaniu: Commands out of sync; you can't run this command now
Wie ktoś co może oznaczać ten błąd ?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Napisano 03.08.2020 21:10
[Save] Blad w zapytaniu: Commands out of sync; you can't run this command now
Wie ktoś co może oznaczać ten błąd ?
Napisano 03.08.2020 21:53
Hm, generalnie nie można wysłać dwóch zapytań jednocześnie, to oznacza ten błąd.
Prawdopodobnie masz gdzieś SQL_PrepareQuery, które nie zostało wysłane przez SQL_ExecuteQuery (tak się domyślam, bazując na Twoim wczorajszym poście).
Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.
Napisano 04.08.2020 01:14
new qCommand[36000], Handle:hQuery, iError, szError[512], Handle:hConnection = SQL_Connect(hTuple, iError, szError, charsmax(szError)); if(!hConnection) { log_amx("[Save] Nie mozna polaczyc sie z baza danych."); log_amx("[Save] Blad: %s", szError); SQL_FreeHandle(hConnection); return; } //... hQuery = SQL_PrepareQuery(hConnection, qCommand); if(!SQL_Execute(hQuery)) { SQL_QueryError(hQuery, szError, charsmax(szError)); log_amx("[Save] Blad w zapytaniu: %s", szError); SQL_FreeHandle(hConnection); return; } //... hQuery = SQL_PrepareQuery(hConnection, qCommand); if(!SQL_Execute(hQuery)) { SQL_QueryError(hQuery, szError, charsmax(szError)); log_amx("[Save] Blad w zapytaniu: %s", szError); SQL_FreeHandle(hConnection); return; } //... hQuery = SQL_PrepareQuery(hConnection, qCommand); if(!SQL_Execute(hQuery)) { SQL_QueryError(hQuery, szError, charsmax(szError)); log_amx("[Save] Blad w zapytaniu: %s", szError); SQL_FreeHandle(hConnection); return; }
Kopiuj + wklej z usunięciem formatex. Kod zatrzymuje się na ostatnim tutaj warunku który jednocześnie wykonuje zapytanie sql (warunek wykonuje się i na końcu zwraca return). Sporo czasu spędziłem nad tym fragmentem kodu ale nic nie widzę. Wszędzie gdzie jest SQL_PrepareQuery jest również po nim SQL_Execute. Co prawda w warunku ale to raczej nie ma znaczenia. Również nigdzie nie zapomniałem o SQL_FreeHandle. Wydaje mi się że wszystko jest dobrze, no jednak trzecie zapytanie (i nie ostatnie) kończy się błędem.
Napisano 04.08.2020 13:11
To co zwraca SQL_PrepareQuery też trzeba zwalniać tak jak to napisane w dokumentacji:
/** * Prepares a query. * * @note This does not actually do a query! * * @param db Connection handle, returned from SQL_Connect(). * @param fmt Query string. Can be formated with format specifiers. * @param ... Additional format specifiers used to format the query. * * @return Returns an SQL query handle, which must always be freed. * Returns Empty_Handle on failure. */ native Handle:SQL_PrepareQuery(Handle:db, const fmt[], any:...);
W kodzie tego nie widać. Trzeba zwolnić to zarówno w bloku, który obsługuje błąd jak i poza nim.
Warto dodać, że zamiast robić tak długich bloków kodu, które robią praktycznie to samo, możesz użyć funkcji, której tylko podasz query. Jeśli się nie myle to w sqlx.inc jest coś takiego.
Also, jestem ciekaw jak długie zapytania masz, że aż taki bufor potrzebujesz
new qCommand[36000]
Napisano 04.08.2020 15:25
To co zwraca SQL_PrepareQuery też trzeba zwalniać tak jak to napisane w dokumentacji:
/** * Prepares a query. * * @note This does not actually do a query! * * @param db Connection handle, returned from SQL_Connect(). * @param fmt Query string. Can be formated with format specifiers. * @param ... Additional format specifiers used to format the query. * * @return Returns an SQL query handle, which must always be freed. * Returns Empty_Handle on failure. */ native Handle:SQL_PrepareQuery(Handle:db, const fmt[], any:...);W kodzie tego nie widać. Trzeba zwolnić to zarówno w bloku, który obsługuje błąd jak i poza nim.
Już rozwiązałem ten problem, zmieniłem zapytanie na którym zatrzymywał się plugin, teoretycznie było to kilka zapytań w jednym SQL_PrepareQuery. Nie wiedziałem że to również powoduje taki błąd. Tak szczerze mówiąc bez żadnego SQL_FreeHandle wszystko działa, ale oczywiście zwolnię tym wszystkie uchwyty.
Also, jestem ciekaw jak długie zapytania masz, że aż taki bufor potrzebujesz
new qCommand[36000]
Tak długi potrzebny mi był przy odczytywaniu danych z bazy, chociaż chyba rzeczywiście trochę przesadziłem. Przy zapisie czego tyczył się ten temat najdłuższe zapytanie miało jakieś 3300 znaków, ale widocznie odruchowo napisałem 36000. I chyba powinienem to zmniejszyć bo to raczej nie wpływa dobrze na wydajność jeśli zmienna jest 10 razy większa niż powinna.
0 użytkowników, 0 gości, 0 anonimowych