←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem zapytanie xSQL

  • +
  • -
rydy171 - zdjęcie rydy171 28.01.2014

jak łącze się z baza to to wyskakuje mi error 

 

[xpSQL.amxx] Blad w zapytaniu: L, PRIMARY KEY  (`nick`) ) [SaveData]

 

ktos mnie naprowadzi na naprawe tego bledu 

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define PLUGIN "zapis XP na SQL"
#define VERSION "1.0"
#define AUTHOR "rydy17"



new Handle: g_SqlTuple;
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	g_SqlTuple = SQL_MakeDbTuple("hf", "us", "pw", "asd");
	
	if(g_SqlTuple == Empty_Handle)
		set_fail_state("Nie mozna utworzyc uchwytu do polaczenia");
		
	
	new iErr, szError[144];
	new Handle:link = SQL_Connect(g_SqlTuple, iErr, szError, 143);
	if(link == Empty_Handle) {
		log_amx("Error (%d): %s", iErr, szError);
		set_fail_state("Brak polaczenia z baza danych");
	}
	
	new Handle:query;
	query = SQL_PrepareQuery(link,
	"CREATE TABLE IF NOT EXISTS 1testxpmodsql1 ( 1nick1 varchar(32 NOT NULL auto_increment,\
	`mapa` varchar(32) NOT NULL,\
	PRIMARY KEY  (`nick`) )");
	
	SQL_Execute(query);
	SQL_FreeHandle(query);


}

public Query(failstate, Handle:query, error[]) {
	if(failstate != TQUERY_SUCCESS) {
		log_amx("Blad SQL: %s", error);
		return;
	}
}

public client_disconnect(id)
{
	SaveData(id);
}

/////////////////////////////////////////

public client_conected(id)
{
	new buffer[512],nick[32] ,mapa[32]
	//get_user_authid(id,steamid,31);
	get_user_name(id,nick,31)
	get_mapname(mapa,31);
	formatex(buffer, charsmax(buffer), "INSERT INTO `testxpmodsql` VALUES (NULL, '%s', '%s');",nick,mapa ); 
	SQL_ThreadQuery(g_SqlTuple, "Query", buffer);	
}

public SaveData(id)
{
	//if(!gConnected) return
	
	new Data[1]
	//Data[0] = id
	new qCommand[512], nick[32],sid[32],mapa[21];
	get_user_authid(id, sid, 31)
	get_user_name(0, nick, charsmax(nick));
	get_mapname(mapa,20)
	format(qCommand, sizeof qCommand-1, "INSERT INTO testxpmodsql VALUES(%s, %s)", nick,mapa)
	SQL_ThreadQuery(g_SqlTuple, "SaveHandler", qCommand, Data, 1);
}

public LoadData(id)
{
	new Data[1]
	Data[0] = id
	new q_command[512], nick[32];
	get_user_name(id,nick,31)
	format(q_command,511,"SELECT * FROM testxpmodsql WHERE nick = '%s'",nick)
	SQL_ThreadQuery(g_SqlTuple, "SaveHandler", q_command, Data, 1);
}
	
public checkSqlHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
	if(Errcode)
	{
		log_to_file("addons/amxmodx/logs/sql.log","Error on checkSqlHandle query: %s",Error)
	}
	if(FailState == TQUERY_CONNECT_FAILED)
	{
		log_to_file("addons/amxmodx/logs/sql.log","Could not connect to SQL database.")
		return PLUGIN_CONTINUE
	}
	else if(FailState == TQUERY_QUERY_FAILED)
	{
		log_to_file("addons/amxmodx/logs/sql.log","checkSqlHandle Query failed.")
		return PLUGIN_CONTINUE
	}
	new id = Data[0]
	
	new linia[512], nick[32], sid[35] ,mapa [31]
	if(!SQL_MoreResults(Query)) // Nie znaleziono wpisów w bazie danych. Możemy spokojnie utworzyć.
		SaveData(id)
	else // A jednak coś znalazł ! Żeby nie robić kolejnej funkcji od razu odczytujemy.
	{
		nick[0]= SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "nick")) // Ponieważ funkcja SQL_ReadResult wymaga ID pola, a my go nie mamy musimy posłużyć się funkcją SQL_FieldNameToNum.
		mapa[0] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "mapa")) // j/w
		//sid[0] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "steamid")) // j/w
		
	}
	formatex(linia,511," %s %s %s",nick,mapa);
	log_amx("%s",linia);
	
	return PLUGIN_CONTINUE
}



public SaveHandler(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize)
{
	log_amx("dziala");
	new id = Data[0]
	if(Errorcode)
		log_amx("Blad w zapytaniu: %s [SaveData]", Error)
	
	if(FailState == TQUERY_CONNECT_FAILED)
	{
		log_amx("Nie mozna podlaczyc sie do bazy danych.")
		return PLUGIN_CONTINUE
	}
	else if(FailState == TQUERY_QUERY_FAILED)
	{
		log_amx("Zapytanie anulowane [SaveData]")
		return PLUGIN_CONTINUE
	}
	
	return PLUGIN_CONTINUE
}


Użytkownik rydy171 edytował ten post 28.01.2014 21:13
Odpowiedz

  • +
  • -
GeDox - zdjęcie GeDox 28.01.2014

"CREATE TABLE IF NOT EXISTS 1testxpmodsql1 ( `nick` varchar(32) NOT NULL auto_increment,\
    `mapa` varchar(32) NOT NULL,\
    PRIMARY KEY (`nick`) )"
Odpowiedz

  • +
  • -
rydy171 - zdjęcie rydy171 29.01.2014

"CREATE TABLE IF NOT EXISTS 1testxpmodsql1 ( `nick` varchar(32) NOT NULL auto_increment,\
    `mapa` varchar(32) NOT NULL,\
    PRIMARY KEY (`nick`) )"

dalej to samo

Odpowiedz

  • +
  • -
rydy171 - zdjęcie rydy171 31.01.2014

refresh

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 02.02.2014

1. Kolumna typu VARCHAR nie może posiadać właściwości auto_increment. Utwórz do tego nową kolumnę id, jej przydziel auto_increment i primary key.
2. zamiast ` masz 1 wokół nazwy 1 kolumny i nazwy tabeli
3. Brak nawiasu zamykającego po 32 przy kolumnie nick.

Moja propozycja:
CREATE TABLE IF NOT EXISTS `testxpmodsql` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nick` varchar(32) NOT NULL,
  `mapa` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
)
Odpowiedz

  • +
  • -
rydy171 - zdjęcie rydy171 03.02.2014

niestety ale dalej to samo

 

nie wiem moze blad jest w SaveData a ja go nie widze

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 07.02.2014

Podaj dokładną treść błędu.

Odpowiedz