Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

błąd sql


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

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 ?


  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

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).


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

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.


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

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.

 

Spoiler

 

Also, jestem ciekaw jak długie zapytania masz, że aż taki bufor potrzebujesz :D

new qCommand[36000]

  • +
  • -
  • 0

#5 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

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 :D

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żytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych