PDA

Просмотр полной версии : [Вопрос] Склад | MySQL



Skipter
08.10.2016, 19:26
Здравствуйте, пользователи данного форума!
- Запись в таблицу происходит с новой строки(если использую INSERT, а если UPDATE - не записывает)
- Не загружает с таблицы

UPDATE `ferm` SET `Warehouse` = '%i' WHERE `ID` = '1' // так записываю
// ID в базе по умолчанию 1

mysql_function_query(Connect, "SELECT * FROM `ferm` WHERE `ID` = '1'", true, "LoadFerm", ""); // OnGameModeInit
stock LoadFerm()
{
new str[100]; // увеличивал, ноль реакции
cache_get_field_content_int(0, !"Warehouse", str);
ferm[0][fSklad] = strval(str);
// Пробовал обновлять 3D текст - все так же.
}

Подключил debug

[16:12:57] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `ferm` SET `Warehouse` = '60' WHERE `ID` = '1'", callback: "(null)", format: "(null)"
[16:12:57] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[16:12:57] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.710 milliseconds
[16:12:57] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving

vovandolg
08.10.2016, 19:49
INSERT - создание/добавление
UPDATE - обновление

Pa4enka
08.10.2016, 19:54
*удалено

Skipter
08.10.2016, 19:55
INSERT - создание/добавление
UPDATE - обновление

Я знаю. UPDATE использую. А INSERT использовал ради теста

Redsan
08.10.2016, 19:59
Используйте public а не stock при загрузке. А насчет обновления данных, покажите полный код.

Skipter
08.10.2016, 20:53
Используйте public а не stock при загрузке. А насчет обновления данных, покажите полный код.

Точно же...


static const m_sql[] = "UPDATE `ferm` SET `Warehouse` = '%i' WHERE `ID` = '1'";
new f_sql[sizeof(m_sql)-2+10];
format(f_sql, sizeof f_sql, m_sql, ferm[0][fSklad]);
mysql_function_query(Connect, f_sql, true, "", "");
Ну и еще обновления 3D text. Это я думаю не стоит кидать т.к обновляет отлично

Redsan
08.10.2016, 21:14
Точно же...


static const m_sql[] = "UPDATE `ferm` SET `Warehouse` = '%i' WHERE `ID` = '1'";
new f_sql[sizeof(m_sql)-2+10];
format(f_sql, sizeof f_sql, m_sql, ferm[0][fSklad]);
mysql_function_query(Connect, f_sql, true, "", "");
Ну и еще обновления 3D text. Это я думаю не стоит кидать т.к обновляет отлично

Оператор sizeof при форматировании неправильно используете, вот так должно работать:

static const m_sql[] = "UPDATE `ferm` SET `Warehouse` = '%i' WHERE `ID` = '1'";
new f_sql[sizeof(m_sql)-2+10];
format(f_sql, sizeof(f_sql), m_sql, ferm[0][fSklad]);
mysql_function_query(Connect, f_sql, true, "", "");

Skipter
08.10.2016, 21:41
Оператор sizeof при форматировании неправильно используете, вот так должно работать:

static const m_sql[] = "UPDATE `ferm` SET `Warehouse` = '%i' WHERE `ID` = '1'";
new f_sql[sizeof(m_sql)-2+10];
format(f_sql, sizeof(f_sql), m_sql, ferm[0][fSklad]);
mysql_function_query(Connect, f_sql, true, "", "");


Нет, к сожалению, Вы ошибаетесь. sizeof можно так использовать. Сделал по обычному sizeof(f_sql) проблема не решилась

Skipter
08.10.2016, 22:30
В общем, вижу никто не знает причины. По этому сделал так: записал через Insert, в базу записалось, переделал на UPDATE, перезапустил сервер. Все работает. Redsan отдельное спасибо!!!

Может кто поймет в ошибка, напишите пожалуйста. :dash2:

Geebrox
08.10.2016, 22:33
Нужно создать 2 функции, 1 для создание записи в таблице (INSERT) и 2 для обновление записи (UPDATE). И вызывать их каждый раз по своему назначению
Или это все можно сделать в 1 функции, если передавать определенное значение для UPDATE и для INSERT.
Пример:



stock func_name(args, update)
{
if(update)
{
//обновляем запись в таблице
}
else
{
//создаем новый запись в таблице
}
return 1;
}

Skipter
08.10.2016, 22:35
Окей. Где использовать INSERT? UPDATE использовать можно когда обновился 3D текст

Такая идея было. Но я так и не понял как реализовать

Geebrox
08.10.2016, 22:40
Окей. Где использовать INSERT? UPDATE использовать можно когда обновился 3D текст

Такая идея было. Но я так и не понял как реализовать

Я не знаю что именно Вы реализуете, это все зависит от вас, вы должны использовать UPDATE если запись уже создана, а если не создана, то создать и далее использовать UPDATE. Но так же Вы можете сделать проверку на то, что имеется ли строка в таблице и далее передавать значение UPDATE или INSERT. Идеи для реализаций полно

Skipter
08.10.2016, 22:42
UPDATE он для того и UPDATE что бы обновлять уже созданною запись. Что за проверка?

Geebrox
08.10.2016, 22:53
Что за проверка?

Я приведу простой пример, Вы переделаете под себя:



stock some_func(args) // функция где вы обращаетесь к бд для UPDATE/INSERT
{
static query_content[] = "SELECT*FROM`имя_таблицы`WHERE\
`любой_уникальный_параметр`='%d'";
new query[sizeof(query_content)-2+длина_параметра];
mysql_format(connectionHandle, query, sizeof(query), "i",
сам_параметр_для_проверки);
mysql_tquery(connectionHandle, query, "CheckTable",
передавайте параметры для обновление/добавление);
}

forward CheckTable(args);
public CheckTable(args)
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
//запись в таблице имеется, значит обновляем
}
else
{
//запись в таблице не имеется, значит создаем
}
return 1;
}

Mr.Dark
09.10.2016, 16:49
У меня антологичная проблема тоже не хочет записывать в базу

Skipter
09.10.2016, 18:43
Geebrox, в дальнейшем учту.
Mr.Dark, воспользуйтесь способом выше, или же моим(тупым!) способом.

qwezert
11.10.2016, 13:08
А делать как нормальный человек запросом?

INSERT INTO table (Warehouse) VALUES (%i)
ON DUPLICATE KEY UPDATE Warehouse=%i WHERE ID= 1;
В итоге если Warehouse уже есть - обновим, если такого Warehouse еще нет - добавим новый с значением.