Обсуждение статьи "Работа с СУБД MySQL из MQL5 (MQL4)" - страница 24

 
Что на счет поддержки caching_sha2_password ? С этим как то можно бороться или сразу установить mysql_native_password ?
 
Dmitri Custurov:
Что на счет поддержки caching_sha2_password ? С этим как то можно бороться или сразу установить mysql_native_password ?

Hy пока native только поддерживается. а реально нужна кому-то поддержка sha2 в этом решении?

То есть сервер базы данных у вас не локально расположен и даже не под vpn? 

 

Привет @EugeniyLugovoy и спасибо за вашу работу!

Есть ли в текущей версии вашей реализации способ получить "LAST_INSERT_ID" после операции INSERT (в таблице с колонкой AUTO_INCREMENT)?

Заранее спасибо и хорошего дня :)
 
arsenico42:

Привет @EugeniyLugovoy и спасибо за вашу работу!

Есть ли в текущей версии вашей реализации способ получить "LAST_INSERT_ID" после операции INSERT (в таблице с колонкой AUTO_INCREMENT)?

Заранее спасибо и хорошего дня :)


Здравствуйте arsenico42, вы можете попробовать сделать вставку в одном запросе, а затем выбрать LAST_INSERT_ID в другом, но я не могу рекомендовать этот способ, потому что LAST_INSERT_ID - это функция, возвращающая глобальную переменную базы данных, и другая вставка (от другого пользователя, выполняющаяся параллельно) между вашей первоначальной вставкой и выбором LAST_INSERT_ID может повлиять на значение LAST_INSERT_ID.

Это не зависит от библиотеки, это то, как работает mysql/mariadb.

Но я могу посоветовать вам создать функцию на стороне базы данных, которая будет вставлять нужные значения, выбирать LAST_INSERT_ID и возвращать этот ID в качестве значения функции. это может выглядеть так:

CREATE FUNCTION `import_funds_add`(
        `p_file_name` varchar(64),
        `p_full_path` varchar(2000),
        `p_status` VARCHAR(10),
        `p_error` VARCHAR(2000)
)
RETURNS bigint(20)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
BEGIN
     declare id bigint;
     INSERT INTO import_funds(`file_name`, `full_path`, `status`, `error`, `creation_date`) 
     VALUES (p_file_name, p_full_path, p_status, p_error, now());
     SELECT LAST_INSERT_ID() INTO id;
     RETURN(id);
END;;

А в MQL нужно открыть курсор для запроса:

qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";

затем получить значение из обычного курсора и закрыть курсор.

Таким образом, вместо того чтобы использовать эти команды по отдельности в MQL, можно просто объединить их на стороне DB в функцию.

Это просто пример из живой системы.

 
Carmine Marrone:

Здравствуйте, elugovoy

Замечательная статья и отличные библиотеки.

Я пытаюсь использовать ваши примеры под MT5, но получаю эту ошибку:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' is not 64-bit version

Вы запускаете MT5 под 32-битной средой?

Не могли бы вы помочь мне с этим?

Спасибо большое!

Кармин Марроне.

Здравствуйте, Кармине, вы можете скачать x64 версию из исходников на github.

https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release

 

Привет @Eugeniy Lugovoy, прежде всего, спасибо за весь вклад в сообщество.


Я застрял здесь:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"Невозможно вызвать 'ReadIni', '..\libraries\MQLMySQL.dll' не загружена"
 
MARCOS DALCIN ALVES DINIZ:

Привет @Eugeniy Lugovoy, прежде всего спасибо за вклад в развитие сообщества.


Я застрял здесь:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"Невозможно вызвать 'ReadIni', '..\libraries\MQLMySQL.dll' не загружена"

Убедитесь, что файлы MQLMySQL.dll и MQLMySQL.def находятся в папке "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\".

Как вы можете видеть, если вы запускаете MQL-программы в режиме Tester, путь к библиотекам будет другим (из-за UAC)

 

При многократной вставке возникает ошибка.

Query =         "INSERT INTO `test_table` (id, code, start_date) VALUES (1,\'EURUSD\',\'2014.01.01 00:00:01\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (2,\'EURJPY\',\'2014.01.02 00:02:00\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (3,\'USDJPY\',\'2014.01.03 03:00:00\');";
      

Ошибка нескольких операторов: У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, который следует использовать вблизи ...



 
Поддерживает ли он команду modify sql?
 
Yu Zhang:

При мультивставке возникает ошибка.

Ошибка нескольких операторов: У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, который следует использовать вблизи ...



Убедитесь, что при открытии соединения с базой данных установлен флаг клиента с несколькими операторами.

int ClientFlag = CLIENT_MULTI_STATEMENTS; // Установка флага мультистатейности
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // Подключение к базе данных