Помогите с SQLite
| |
cssv70
|
Дата: Суббота, 08.11.2014, 11:27:04 | Сообщение # 1 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
Всем привет . Помогите с SQLite . Просмотр и запись работает Код decl String:steamid[64]; GetClientAuthString(client, steamid, 32); new String:query[255]; Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid); new Handle:hquery = SQL_Query(g_SQL, query); if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery)) { PrintToChat(client, "\x04 Вы уже в базе!"); SQL_TQuery(g_SQL, SQL_DefCallback, query); return Plugin_Handled; }
Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 600); PrintToChat(client, "\x04 Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
Не получается сделать удаление из базы по истечению времени timestamp
Код Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid); PrintToChat(client, "\x04 Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
Я новичок
|
|
| |
king(rus)
|
Дата: Суббота, 08.11.2014, 16:19:30 | Сообщение # 2 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата cssv70 ( ) SQL_DefCallback Где обработка? Давай весь код SQL.
|
|
| |
cssv70
|
Дата: Вторник, 11.11.2014, 14:59:08 | Сообщение # 3 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
Код public OnPluginStart() { if (!SQL_CheckConfig("MySection")) { SetFailState("Секция \"MySection\" не найдена в databases.cfg"); return; }
decl String:error[256]; g_SQL = SQL_Connect("MySection", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; }
new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); LogMessage("Установлено %s соединение", "SQLite");
if (g_SQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL, `timestamp` varchar(20) NOT NULL, \ PRIMARY KEY (`steamid`))", 0); }
}
public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); } public Action:Command_(client, args) { decl String:steamid[64], timestamp; GetClientAuthString(client, steamid, 32); new String:query[255]; Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid); new Handle:hquery = SQL_Query(g_SQL, query); if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery)) { PrintToChat(client, "\x04Вы уже зарегестрированы!"); SQL_TQuery(g_SQL, SQL_DefCallback, query); return Plugin_Handled; }
Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 60); PrintToChat(client, "\x04Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
return Plugin_Handled;
}
Добавлено (09.11.2014, 11:58:20) --------------------------------------------- Исправьте ошибку
Код decl String:sSteam[64], timestamp; GetClientAuthString(client, sSteam, sizeof(sSteam)); Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", timestamp); if(SQL_Query(g_SQL, sSteam)) { timestamp = SQL_Query(g_SQL, "timestamp", 0); if (timestamp > 0) { if(GetTime() > timestamp) { Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query) return Plugin_Handled; } } } Добавлено (11.11.2014, 14:59:08) --------------------------------------------- Хоть бы кто отписался, может бы подсказал ?
Сообщение отредактировал cssv70 - Воскресенье, 09.11.2014, 10:28:52 |
|
| |
king(rus)
|
Дата: Вторник, 11.11.2014, 15:17:59 | Сообщение # 4 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Код Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", timestamp); Для начала вот тут твоя ошибка. Ты ищешь по стим ид, а переменная timestamp.
|
|
| |
cssv70
|
Дата: Вторник, 11.11.2014, 15:36:15 | Сообщение # 5 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
В базе прописал steamid, timestamp время Код Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 60); PrintToChat(client, "\x04Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query); как по истечению времени timestampсделать удаление из базы Код Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query)
|
|
| |
dron216
|
Дата: Вторник, 11.11.2014, 19:13:30 | Сообщение # 6 |
|
Сообщений: 151
Репутация: 18 [ +/- ]
|
|
Код Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query)
|
|
| |
cssv70
|
Дата: Вторник, 11.11.2014, 20:52:40 | Сообщение # 7 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
Полностью код Код #include <sourcemod>
new Handle:g_SQL = INVALID_HANDLE
public Plugin:myinfo = { name = "test", author = "Unknown", description = "<- Description ->", version = "1.0", url = "<- URL ->" }
public OnPluginStart() { if (!SQL_CheckConfig("MySection")) { SetFailState("Секция \"MySection\" не найдена в databases.cfg"); return; }
decl String:error[256]; g_SQL = SQL_Connect("MySection", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; }
new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); LogMessage("Установлено %s соединение", "SQLite");
if (g_SQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL, `timestamp` varchar(20) NOT NULL, \ PRIMARY KEY (`steamid`))", 0); }
RegConsoleCmd("sm_test", Command_test);
}
public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); }
public Action:Command_test(client, args) { new String:steamid[64]; GetClientAuthString(client, steamid, 32); new String:query[255]; Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid); new Handle:hquery = SQL_Query(g_SQL, query); if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery)) { PrintToChat(client, "\x04Вы уже зарегестрированы!"); SQL_TQuery(g_SQL, SQL_DefCallback, query); return Plugin_Handled; }
GetClientAuthString(client, steamid, sizeof(steamid)); Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10); PrintToChat(client, "\x04Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
// Проверка времени и удаление new String: Time; Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query) return Plugin_Handled;
}
не работает
|
|
| |
dron216
|
Дата: Вторник, 11.11.2014, 21:50:40 | Сообщение # 8 |
|
Сообщений: 151
Репутация: 18 [ +/- ]
|
|
Time числовая переменная, в неё внеси необходимое время... (например, у игрока timestamp 2, в Time ставишь 2, и его удалит...)
|
|
| |
Tokami
|
Дата: Вторник, 11.11.2014, 22:12:09 | Сообщение # 9 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Не знаю странно ты берешь инфу из базы я делаю так у меня все норм работает Код SELECT * FROM bans_players WHERE steamid='%s' AND (time = '0' OR time > UNIX_TIMESTAMP())
|
|
| |
cssv70
|
Дата: Среда, 12.11.2014, 13:35:43 | Сообщение # 10 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
dron216, извени я новичке не мог бы ты написать полностью кода то я не догоняю
Здесь я прописал время 10 секунд GetTime() + 10 Код Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10); PrintToChat(client, "\x04 Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
где здесь записать Time 10 Код new String: Time; Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query)
|
|
| |
dron216
|
Дата: Среда, 12.11.2014, 15:16:53 | Сообщение # 11 |
|
Сообщений: 151
Репутация: 18 [ +/- ]
|
|
а не В sql запросе также можно использовать < (меньше) и > (больше)
Сообщение отредактировал dron216 - Среда, 12.11.2014, 15:18:55 |
|
| |
cssv70
|
Дата: Среда, 12.11.2014, 17:01:44 | Сообщение # 12 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
dron216, не работает
Код #include <sourcemod>
new Handle:g_SQL = INVALID_HANDLE
public Plugin:myinfo = { name = "test", author = "Unknown", description = "<- Description ->", version = "1.0", url = "<- URL ->" }
public OnPluginStart() { if (!SQL_CheckConfig("MySection")) { SetFailState("Секция \"MySection\" не найдена в databases.cfg"); return; }
decl String:error[256]; g_SQL = SQL_Connect("MySection", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; }
new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); LogMessage("Установлено %s соединение", "SQLite");
if (g_SQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL, `timestamp` varchar(20) NOT NULL, \ PRIMARY KEY (`steamid`))", 0); }
RegConsoleCmd("sm_test", Command_test);
}
public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); }
public Action:Command_test(client, args) { new String:steamid[64]; GetClientAuthString(client, steamid, 32); new String:query[255]; Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid); new Handle:hquery = SQL_Query(g_SQL, query); if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery)) { PrintToChat(client, "\x04Вы уже зарегестрированы!"); SQL_TQuery(g_SQL, SQL_DefCallback, query); return Plugin_Handled; }
GetClientAuthString(client, steamid, sizeof(steamid)); Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10); PrintToChat(client, "\x04Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
// Проверка времени и удаление new Time = 10; Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query) return Plugin_Handled;
}
|
|
| |
king(rus)
|
Дата: Среда, 12.11.2014, 20:34:45 | Сообщение # 13 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата cssv70 ( ) dron216, не работает
Код #include <sourcemod>
new Handle:g_SQL = INVALID_HANDLE
public Plugin:myinfo = { name = "test", author = "Unknown", description = "<- Description ->", version = "1.0", url = "<- URL ->" }
public OnPluginStart() { if (!SQL_CheckConfig("MySection")) { SetFailState("Секция \"MySection\" не найдена в databases.cfg"); return; }
decl String:error[256]; g_SQL = SQL_Connect("MySection", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; }
new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); LogMessage("Установлено %s соединение", "SQLite");
if (g_SQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL, `timestamp` varchar(20) NOT NULL, \ PRIMARY KEY (`steamid`))", 0); }
RegConsoleCmd("sm_test", Command_test);
}
public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); }
public Action:Command_test(client, args) { new String:steamid[64]; GetClientAuthString(client, steamid, 32); new String:query[255]; Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid); new Handle:hquery = SQL_Query(g_SQL, query); if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery)) { PrintToChat(client, "\x04Вы уже зарегестрированы!"); SQL_TQuery(g_SQL, SQL_DefCallback, query); return Plugin_Handled; }
GetClientAuthString(client, steamid, sizeof(steamid)); Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10); PrintToChat(client, "\x04Фаил записался."); SQL_TQuery(g_SQL, SQL_DefCallback, query);
// Проверка времени и удаление new Time = 10; Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time); PrintToChat(client, "\x04Удалены из базы."); SQL_TQuery(g_SQL, SQL_DefCallback, query) return Plugin_Handled;
}
Разбери код логически. Если не сможешь, пиши в ЛС. Дам свой скайп
|
|
| |
dron216
|
Дата: Среда, 12.11.2014, 22:43:28 | Сообщение # 14 |
|
Сообщений: 151
Репутация: 18 [ +/- ]
|
|
Во первых, у тебя занесение и удаление срабатывают по одной команде, даже если тебя нет, тебя занесет и тут же проверит вышло ли время... Во вторых, почитай что такое GetTime() - https://sm.alliedmods.net/api/ В третьих, при проверке лучше используй UNIX_TIMESTAMP (в самом sql запросе) и никах доп. переменных не надо Код DELETE FROM my_tab WHERE timestamp < UNIX_TIMESTAMP()
Сообщение отредактировал dron216 - Четверг, 13.11.2014, 14:41:05 |
|
| |
|