[SOLVED] SQLX problem... :(
Hi guys, im new to SQL stuff and i didn't find the bug in my script...
I want to save some configurations from the players in a DB.
And i got this error:
Code:
L 06/13/2007 - 22:17:30: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 06/13/2007 - 22:17:30: [AMXX] [0] phphf0lD6.sma::ReadHandle (line 532)
after that i changed the line 532:
Code:
from: SQL_ReadResult(Query, 1, g_Flags[Data[0]], 9);
into: SQL_ReadResult(Query, 0, g_Flags[Data[0]], 9);
but it doesn't work..there are no flags in the DB :(
Now i get this error:
Code:
L 06/13/2007 - 22:26:34: [blabla.amxx] [CFG] Error on query: Duplicate entry 'STEAM_0:0:2569349' for key 1
L 06/13/2007 - 22:26:20: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 06/13/2007 - 22:26:20: [AMXX] [0] phphf0lD6.sma::SQL_init_Write (line 590)
L 06/13/2007 - 22:26:20: [AMXX] [1] phphf0lD6.sma::write_client_init (line 578)
L 06/13/2007 - 22:26:20: [AMXX] [2] phphf0lD6.sma::WriteHandle (line 566)
The problem was that i have used insert everytime, but if a steamid is already in the DB there comes an error about duplicate entry..so i have tried to update the DB, but i have no idea how to do this....
Can anyone please help me with that im going crazy :(
here is the DB code...
If you need more details please feel free to ask...thx :)
Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <fun>
#include <sqlx>
// DB Stuff
new gcfgHost;
new gcfgUser;
new gcfgPass;
new gcfgDatabase;
new Handle:g_cfg_SqlTuple;
new g_cfg_Cache[512];
new g_Flags[MAX_PLAYERS][10];
public plugin_init()
{
// ConfigDB-Stuff
gcfgHost = register_cvar("config_sql_host", "host", FCVAR_PROTECTED);
gcfgUser = register_cvar("config_sql_user", "user", FCVAR_PROTECTED);
gcfgPass = register_cvar("config_sql_pass", "pass", FCVAR_PROTECTED);
gcfgDatabase = register_cvar("config_sql_db", "amx", FCVAR_PROTECTED);
}
public client_putinserver(id)
{
//User config
read_client_config(id);
}
public client_disconnect(id)
{
write_client_config(id);
}
public plugin_end()
{
SQL_FreeHandle(g_cfg_SqlTuple);
SQL_FreeHandle(gSqlHandle);
}
read_client_config(id)
{
new steamid[MAX_STR];
get_user_authid(id, steamid, MAX_STR-1);
format(g_cfg_Cache, 511, "SELECT * FROM userconfigs WHERE steamid='%s'", steamid);
SQL_Query_Read(id, g_cfg_Cache);
}
SQL_Query_Read(id, query[], {Float, Sql, Result, _}:...)
{
static data[1];
static formattedQuery[MAX_QUERY];
data[0] = id;
formattedQuery[0] = 0;
vformat(formattedQuery, MAX_QUERY-1, query, 2);
SQL_ThreadQuery(g_cfg_SqlTuple, "ReadHandle", formattedQuery, data, 1);
}
public ReadHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED) log_amx("[EA-CFG] Could not connect to SQL database.");
else if(FailState == TQUERY_QUERY_FAILED) log_amx("[EA-CFG] Query failed.");
if(Errcode)
{
write_client_config(Data[0]);
return log_amx("[EA-CFG] Error on query: %s",Error);
}
else
{
SQL_ReadResult(Query, 0, g_Flags[Data[0]], 9);
client_print(0, print_chat, "zomg, some data-flags: %s", g_Flags[Data[0]]);
SetConfigFlags(Data[0]);
}
return PLUGIN_CONTINUE;
}
write_client_config(id)
{
new steamid[MAX_STR];
get_user_authid(id, steamid, MAX_STR-1);
format(g_cfg_Cache, 511, "INSERT INTO userconfigs VALUES('%s','%s')", steamid, g_Flags[id]);
SQL_Query_Write(id, g_cfg_Cache);
}
SQL_Query_Write(id, query[], {Float, Sql, Result, _}:...)
{
static data[1];
static formattedQuery[MAX_QUERY];
data[0] = id;
formattedQuery[0] = 0;
vformat(formattedQuery, MAX_QUERY-1, query, 2);
SQL_ThreadQuery(g_cfg_SqlTuple, "WriteHandle", formattedQuery, data, 1);
}
public WriteHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED) log_amx("[EA-CFG] Could not connect to SQL database.");
else if(FailState == TQUERY_QUERY_FAILED) log_amx("[EA-CFG] Query failed.");
if(Errcode)
{
write_client_init(Data[0]);
return log_amx("[EA-CFG] Error on query: %s",Error);
}
return PLUGIN_CONTINUE;
}
write_client_init(id)
{
new steamid[MAX_STR];
get_user_authid(id, steamid, MAX_STR-1);
format(g_cfg_Cache, 511, "UPDATE userconfigs SET flags = '%s' WHERE steamid = '%s'", g_Flags[id], steamid);
SQL_init_Write(id, g_cfg_Cache);
}
SQL_init_Write(id, query[], {Float, Sql, Result, _}:...)
{
static data[1];
static formattedQuery[MAX_QUERY];
data[0] = id;
formattedQuery[0] = 0;
vformat(formattedQuery, MAX_QUERY-1, query, 2);
SQL_ThreadQuery(g_cfg_SqlTuple, "InitHandle", formattedQuery, data, 1);
}
public InitHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED) log_amx("[EA-CFG]Could not connect to SQL Config-Database.");
else if(FailState == TQUERY_QUERY_FAILED) log_amx("[EA-CFG] Query failed.");
if(Errcode)
{
write_client_init(Data[0]);
return log_amx("[EA-CFG] Error on query: %s",Error);
}
return PLUGIN_CONTINUE;
}
addToFlags(id, Flag[])
{
if(contain(g_Flags[id], Flag))
{
//log_amx("Error: Flag already exist in PlayerFlagString!");
return;
}
if(equal(Flag, "Y"))
{
removeFromFlags(id, "G");
removeFromFlags(id, "T");
}
if(equal(Flag, "G"))
{
removeFromFlags(id, "Y");
removeFromFlags(id, "T");
}
if(equal(Flag, "T"))
{
removeFromFlags(id, "Y");
removeFromFlags(id, "G");
}
add(g_Flags[id], 9, Flag);
}
removeFromFlags(id, Flag[])
{
if(contain(g_Flags[id], Flag))
{
replace_all(g_Flags[id], 9, Flag, "");
}
}
SetConfigFlags(id)
{
// TimeBar
if(contain(g_Flags[id], "B"))
{
g_ShowTimeBar[id] = false;
if(task_exists(id+110477)) remove_task(id+110477);
}
else
{
g_ShowTimeBar[id] = true;
set_task(1.0, "timershow", id+110477, "", 0, "b");
}
// ReloadBar
if(contain(g_Flags[id], "R"))
{
g_ShowReloadBar[id] = false;
}
else
{
g_ShowReloadBar[id] = true;
}
// Join/Leave
if(contain(g_Flags[id], "J"))
{
g_ShowJoinLeave[id] = false;
}
else
{
g_ShowJoinLeave[id] = true;
}
// ChatColors
if(contain(g_Flags[id], "Y")) g_chatcolor[id] = 1;
if(contain(g_Flags[id], "G")) g_chatcolor[id] = 2;
if(contain(g_Flags[id], "T")) g_chatcolor[id] = 3;
}
greetz regalis
|