Discussion de l'article "Comment accéder à la base de données MySQL à partir de MQL5 (MQL4)" - page 24

 
Qu'en est-il du support de caching_sha2_password ? Y a-t-il un moyen de gérer cela ou dois-je simplement installer mysql_native_password ?
 
Dmitri Custurov:
Qu'en est-il du support de caching_sha2_password ? Y a-t-il un moyen de le gérer ou d'installer simplement mysql_native_password ?

Hy jusqu'à présent, le support natif est le seul supporté. est-ce que quelqu'un a vraiment besoin du support sha2 dans cette solution ?

Donc votre serveur de base de données n'est pas localisé localement ou même sous vpn ?

 

Bonjour @EugeniyLugovoy et merci pour votre travail !

Dans la version actuelle de votre implémentation, existe-t-il un moyen de récupérer le "LAST_INSERT_ID" après une opération INSERT (dans une table avec une colonne AUTO_INCREMENT) ?

Merci d'avance et bonne journée :)
 
arsenico42:

Bonjour @EugeniyLugovoy et merci pour votre travail !

Dans la version actuelle de votre implémentation, existe-t-il un moyen de récupérer le "LAST_INSERT_ID" après une opération INSERT (dans une table avec une colonne AUTO_INCREMENT) ?

Merci d'avance et bonne journée :)


Bonjour arsenico42, vous pouvez essayer d'effectuer une insertion dans une requête et de sélectionner LAST_INSERT_ID dans une autre, mais je ne peux pas vous recommander cette méthode, car LAST_INSERT_ID est une fonction qui renvoie une variable globale de base de données, et une autre insertion (d'un autre utilisateur, exécutée simultanément) entre votre insertion initiale et la sélection de LAST_INSERT_ID peut affecter la valeur de LAST_INSERT_ID.

Cela ne dépend pas de la bibliothèque, c'est la façon dont mysql/mariadb fonctionne.

Mais je peux vous conseiller de créer une fonction du côté de la base de données pour insérer les valeurs requises, sélectionner LAST_INSERT_ID et retourner cet ID comme valeur de la fonction :

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;;

En MQL, vous devez ouvrir un curseur pour la requête :

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

puis obtenir la valeur du curseur habituel et fermer le curseur.

Ainsi, au lieu d'utiliser ces commandes séparément dans MQL, vous pouvez simplement les combiner dans une fonction du côté de la base de données.

Ce n'est qu'un exemple tiré d'un système réel.

 
Carmine Marrone:

Bonjour elugovoy

Superbe article et superbes bibliothèques.

J'essaie d'utiliser vos exemples sous MT5 mais j'obtiens cette erreur :

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' n'est pas une version 64 bits.

Faites-vous tourner MT5 sous un environnement 32 bits ?

Pourriez-vous m'aider ?

Je vous remercie de votre aide.

Carmine Marrone.

Bonjour Carmine, vous pouvez télécharger la version x64 à partir des sources sur github.

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

 

Hey @Eugeniy Lugovoy, tout d'abord merci pour votre contribution à la communauté.


Je suis bloqué ici :

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

Cannot call 'ReadIni', '..\libraries\MQLMySQL.dll' is not loaded" [126] "Impossible d'appeler 'ReadIni', '..\libraries\MQLMySQL.dll' n'est pas chargée
 
MARCOS DALCIN ALVES DINIZ:

Hey @Eugeniy Lugovoy, tout d'abord merci pour votre contribution à la communauté.


Je suis bloqué ici :

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

Cannot call 'ReadIni', '..\libraries\MQLMySQL.dll' is not loaded" [126] "Impossible d'appeler 'ReadIni', '..\libraries\MQLMySQL.dll' n'est pas chargée

Assurez-vous que les fichiers MQLMySQL.dll et MQLMySQL.def se trouvent dans votre dossier "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\"

Comme vous pouvez le voir, si vous exécutez des programmes MQL en mode Tester, le chemin vers les bibliothèques sera différent (à cause de l'UAC).

 

multi-insert obtient une erreur.

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\');";
      

Erreur d'instructions multiples : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à votre version du serveur MySQL pour connaître la bonne syntaxe à utiliser près de ...



 
Est-ce qu'il permet de modifier la commande sql ?
 
Yu Zhang:

multi-insert obtient une erreur.

Erreur d'instructions multiples : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à votre version du serveur MySQL pour connaître la bonne syntaxe à utiliser près de ...



Assurez-vous que vous avez défini le drapeau client multi-déclarations lors de l'ouverture de la connexion à la base de données.

int ClientFlag = CLIENT_MULTI_STATEMENTS; // Mise en place du drapeau multi-statements
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // Connexion à la base de données