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

 
Pavel Kolchin:

начало постоянно вылазить, что значит?

 

при выполнении моего кода в этой строчке

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

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

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

 
MetaQuotes Software Corp.:

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

если убираю условие то всё работает, в общем то можно переделать по другому, просто не понятно почему крашится

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

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

В DLL перекодировка выполняется
 
Pavel Kolchin:

если убираю условие то всё работает, в общем то можно переделать по другому, просто не понятно почему крашится

//if(DB==-1){

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

//}

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

А что за логика? у Вас коннект до этого кода выполнен? Чему DB равно до условия? Если переменная DB не инициализирована, то скорее всего из-за этого.

А в последнем примере вы штатно открываете соединение с базой и поэтому курсор тоже отрабатывает 

Скрипты поставляемые с DLL отрабатывают?
 

Приветствую Евгений!

За скрипт спасибо. Решил внедрить в свой проект. Но на стадии тестирования скриптов которые Вы приложили к проекту у меня есть 1 баг, не понятного рода. Не работает ReadIni. Может я что не так делаю, но он всегда возвращает пустые значения из ini. В чем может быть причина? Я подозреваю, что не находит файл по указанному пути, но я проверил из разных директорий все правильно и на месте.

Если Прописать данные для соединения в коде напрямую, то все работает хорошо.

использую mt4.
 
И вот еще проблема: русский текст вставляется караказябами. Я конечно понимаю, что в dll выполняется перекодировка, но у меня бд на UTF-8. Что мне делать, чтобы читабельный русский текст вставлялся...? это мне сильно упростит жизнь...
 
Anton Gaisin:

Приветствую Евгений!

За скрипт спасибо. Решил внедрить в свой проект. Но на стадии тестирования скриптов которые Вы приложили к проекту у меня есть 1 баг, не понятного рода. Не работает ReadIni. Может я что не так делаю, но он всегда возвращает пустые значения из ini. В чем может быть причина? Я подозреваю, что не находит файл по указанному пути, но я проверил из разных директорий все правильно и на месте.

Если Прописать данные для соединения в коде напрямую, то все работает хорошо.

использую mt4.

Проверить пути надо... UAC скорее всего влияет. Вы какой путь задаете к INI? К директории терминала или Data?

 
Anton Gaisin:
И вот еще проблема: русский текст вставляется караказябами. Я конечно понимаю, что в dll выполняется перекодировка, но у меня бд на UTF-8. Что мне делать, чтобы читабельный русский текст вставлялся...? это мне сильно упростит жизнь...

Да, конвертация  в ASCII идет, от китайских собратьев тоже замечание по этому поводу есть. Как появится время я постараюсь исправить это.

 
Eugeniy Lugovoy:

Проверить пути надо... UAC скорее всего влияет. Вы какой путь задаете к INI? К директории терминала или Data?

В Вашем архиве примеры есть...вот в них все оставил как есть. Просто поменял ini.

Проблему в общем решил. Сам затупил. Просто раньше папка с MT4 и папка с данными были едины. Теперь папка для данных хранится в специальной секции Windows. Путь правильно теперь брать TerminalInfoString(TERMINAL_DATA_PATH) а не TerminalPath()

 
Anton Gaisin:

В Вашем архиве примеры есть...вот в них все оставил как есть. Просто поменял ini.

Проблему в общем решил. Сам затупил. Просто раньше папка с MT4 и папка с данными были едины. Теперь папка для данных хранится в специальной секции Windows. Путь правильно теперь брать TerminalInfoString(TERMINAL_DATA_PATH) а не TerminalPath()

Хм... это где-то в старой библиотеке, в последних версиях (выложенных в обсуждении) я правил если мне память не изменяет :) 

Ок. тогда остается проблема с UTF. постараюсь решить на этой неделе до выходных, если меня не перегрузят работой