Discusión sobre el artículo "Trabajo con el SGBD MySQL desde MQL5 (MQL4)" - página 14

 
Pavel Kolchin:

empezaron a aparecer todo el tiempo, ¿qué significa eso?

al ejecutar mi código en esta línea.

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

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

En MQL todas las cadenas son Unicode y las pasas en lugar de ANSI.

Es por eso que el dllka se bloquea.

 
MetaQuotes Software Corp.:

En MQL todas las cadenas son Unicode y las pasas en lugar de ANSI.

Por eso se cuelga la dll.

Si quito la condición, todo funciona, en general, se puede rehacer de otra manera, simplemente no entiendo por qué se bloquea.

//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.:

En MQL todas las cadenas son Unicode y las pasas en lugar de ANSI.

Por eso se cuelga la dll.

En DLL se realiza la recodificación
 
Pavel Kolchin:

Si quito la condición, todo funciona, en general, se puede rehacer de otra manera, simplemente no entiendo por qué se bloquea

//if(DB==-1){

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

//}

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

¿Cuál es la lógica? ¿Tiene una conexión antes de este código? ¿A qué es igual DB antes de la condición? Si la variable DB no está inicializada, probablemente sea por esto.

Y en el último ejemplo abres una conexión a la base de datos normalmente y por eso el cursor también funciona.

¿Funcionan los scripts suministrados con la DLL?
 

¡Saludos Eugene!

Gracias por el script. Decidí implementarlo en mi proyecto. Pero en la etapa de pruebas de los scripts que ha adjuntado al proyecto tengo 1 error, no está claro. ReadIni no funciona. Tal vez hago algo mal, pero siempre devuelve valores vacíos de ini. ¿Cual puede ser la razón? Sospecho que no encuentra el archivo en la ruta especificada, pero he comprobado desde diferentes directorios todo es correcto y en su lugar.

Si prescribo los datos para la conexión en el código directamente, todo funciona bien.

Estoy utilizando mt4.
 
Y aquí hay otro problema: el texto ruso se inserta en karakaziaby. Por supuesto entiendo que el dll está recodificando, pero mi base de datos es UTF-8. ¿Qué debo hacer para insertar texto ruso legible...? me hará la vida mucho más fácil...?
 
Anton Gaisin:

¡Saludos Eugene!

Gracias por el script. Decidí implementarlo en mi proyecto. Pero en la etapa de pruebas de los scripts que adjuntaste al proyecto tengo 1 bug, no claro. ReadIni no funciona. Tal vez hago algo mal, pero siempre devuelve valores vacíos de ini. ¿Cual puede ser la razón? Sospecho que no encuentra el fichero en la ruta especificada, pero he comprobado desde diferentes directorios que todo está correcto y en su sitio.

Si prescribo los datos para la conexión en el código directamente, todo funciona bien.

Estoy utilizando mt4.

Usted debe comprobar las rutas ... UAC más probable es que afecta. ¿Qué ruta se establece en INI? ¿Al directorio de la terminal o a Data?

 
Anton Gaisin:
Y aquí hay otro problema: el texto ruso se inserta en karakaziaby. Por supuesto entiendo que el dll está recodificando, pero mi base de datos es UTF-8. ¿Qué debo hacer para insertar texto ruso legible...? me hará la vida mucho más fácil...?

Sí, la conversión a ASCII está en marcha, también hay un comentario al respecto de colegas chinos. En cuanto tenga tiempo intentaré arreglarlo.

 
Eugeniy Lugovoy:

Tienes que comprobar las rutas... UAC probablemente afecta. ¿A qué ruta pones INI? ¿Al directorio de la terminal o a Data?

Hay ejemplos en tu archivo...en ellos dejé todo como está. Sólo cambié el ini.

El problema se solucionó. Yo mismo fui un estúpido. Antes la carpeta con MT4 y la carpeta con datos estaban unidas. Ahora la carpeta para los datos está guardada en una sección especial de Windows. Ahora la ruta es correcto tomar TerminalInfoString(TERMINAL_DATA_PATH) en lugar de TerminalPath().

 
Anton Gaisin:

Hay ejemplos en tu archivo...en ellos dejé todo como estaba. Solo cambie el ini.

El problema se solucionó. Yo mismo fui estupido. Antes la carpeta con MT4 y la carpeta con datos estaban unidas. Ahora la carpeta para los datos se almacena en una sección especial de Windows. Ahora la ruta es correcto tomar TerminalInfoString(TERMINAL_DATA_PATH) en lugar de TerminalPath().

Hmm... es en algún lugar de la antigua biblioteca, en las últimas versiones (publicado en la discusión) lo he corregido si mi memoria no me falla :)

Ok. entonces el problema del UTF permanece. Intentaré resolverlo esta semana hasta el fin de semana, si no estoy sobrecargado de trabajo.