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

 
Pavel Kolchin:

ont commencé à apparaître en permanence, qu'est-ce que cela signifie ?

lors de l'exécution de mon code dans cette ligne.

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

Dans MQL, toutes les chaînes sont Unicode et vous les passez au lieu d'ANSI.

C'est la raison pour laquelle le dllka se plante.

 
MetaQuotes Software Corp.:

Dans MQL, toutes les chaînes sont Unicode et vous les passez au lieu d'ANSI.

C'est pourquoi la dll plante.

Si je supprime la condition, tout fonctionne, en général, on peut refaire les choses différemment, mais je ne comprends pas pourquoi ça plante.

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
MetaQuotes Software Corp.:

Dans MQL, toutes les chaînes sont Unicode et vous les passez au lieu d'ANSI.

C'est pourquoi la dll se plante.

Dans la DLL, le recodage est effectué
 
Pavel Kolchin:

Si je supprime la condition, tout fonctionne, en général, vous pouvez le refaire différemment, mais je ne comprends pas pourquoi il se bloque.

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

Quelle est la logique ? Avez-vous une connexion avant ce code ? Quelle est la valeur de DB avant la condition ? Si la variable DB n'est pas initialisée, c'est probablement à cause de cela.

Et dans le dernier exemple, vous ouvrez une connexion à la base de données normalement et c'est pourquoi le curseur fonctionne aussi.

Les scripts fournis avec la DLL fonctionnent-ils ?
 

Salutations Eugène !

Merci pour ce script. J'ai décidé de le mettre en œuvre dans mon projet. Mais au stade du test des scripts que vous avez joints au projet, j'ai un bogue, qui n'est pas clair. ReadIni ne fonctionne pas. Peut-être que je fais quelque chose de mal, mais il renvoie toujours des valeurs vides de l'ini. Quelle pourrait en être la raison ? Je soupçonne qu'il ne trouve pas le fichier sur le chemin spécifié, mais j'ai vérifié à partir de différents répertoires que tout est correct et en place.

Si je prescris les données pour la connexion dans le code directement, tout fonctionne bien.

J'utilise mt4.
 
Et voici un autre problème : du texte russe est inséré dans karakaziaby. Bien sûr, je comprends que la dll recode, mais ma base de données est en UTF-8. Que dois-je faire pour insérer du texte russe lisible... ? cela me faciliterait grandement la vie... ?
 
Anton Gaisin:

Salutations Eugène !

Merci pour ce script. J'ai décidé de le mettre en œuvre dans mon projet. Mais au stade du test des scripts que vous avez joints au projet, j'ai un bogue, qui n'est pas clair. ReadIni ne fonctionne pas. Peut-être que je fais quelque chose de mal, mais il renvoie toujours des valeurs vides de l'ini. Quelle pourrait en être la raison ? Je soupçonne qu'il ne trouve pas le fichier sur le chemin spécifié, mais j'ai vérifié à partir de différents répertoires que tout est correct et en place.

Si je prescris les données pour la connexion dans le code directement, tout fonctionne bien.

J'utilise mt4.

Vous devriez vérifier les chemins d'accès... L'UAC est probablement en cause. Quel chemin définissez-vous pour l'INI ? Dans le répertoire du terminal ou dans Data ?

 
Anton Gaisin:
Et voici un autre problème : du texte russe est inséré dans karakaziaby. Bien sûr, je comprends que la dll recode, mais ma base de données est en UTF-8. Que dois-je faire pour insérer du texte russe lisible... ? cela me faciliterait grandement la vie... ?

Oui, la conversion en ASCII est en cours, des collègues chinois ont également fait une remarque à ce sujet. Dès que j'aurai le temps, j'essaierai d'y remédier.

 
Eugeniy Lugovoy:

Vous devez vérifier les chemins d'accès... L'UAC l'affecte probablement. Quel chemin d'accès définissez-vous pour l'INI ? Dans le répertoire du terminal ou dans Data ?

Il y a des exemples dans votre archive... dans ces exemples, j'ai tout laissé tel quel. J'ai juste changé l'ini.

Le problème est résolu. J'ai été stupide moi-même. Auparavant, le dossier avec MT4 et le dossier avec les données étaient réunis. Maintenant le dossier des données est stocké dans une section spéciale de Windows. Maintenant le chemin est correct et il faut prendre TerminalInfoString(TERMINAL_DATA_PATH) au lieu de TerminalPath().

 
Anton Gaisin:

Il y a des exemples dans votre archive... dans ces exemples, j'ai tout laissé tel quel. J'ai juste changé l'ini.

Le problème est résolu. J'ai été stupide moi-même. Auparavant, le dossier avec MT4 et le dossier avec les données étaient réunis. Maintenant le dossier des données est stocké dans une section spéciale de Windows. Maintenant le chemin est correct et il faut prendre TerminalInfoString(TERMINAL_DATA_PATH) au lieu de TerminalPath().

Hmm... c'est quelque part dans l'ancienne bibliothèque, dans les dernières versions (postées dans la discussion) je l'ai corrigé si ma mémoire est bonne :)

Je vais essayer de le résoudre cette semaine jusqu'au week-end, si je ne suis pas surchargé de travail.